@oaath/cli 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.mjs ADDED
@@ -0,0 +1,1030 @@
1
+ #!/usr/bin/env node
2
+ import { parseArgs } from "node:util";
3
+ import { decodeAbiParameters, encodeFunctionData, getCreate2Address, keccak256, parseAbi, sliceHex, stringToHex } from "viem";
4
+ import "viem/account-abstraction";
5
+ //#region ../protocol/dist/index.js
6
+ function reflect(read, label, fail) {
7
+ try {
8
+ return read();
9
+ } catch {
10
+ return fail(`${label} is invalid`);
11
+ }
12
+ }
13
+ function captureRecord(value, label, context, fail) {
14
+ if (!value || typeof value !== "object" || reflect(() => Array.isArray(value), label, fail)) return fail(`${label} must be a plain object`);
15
+ if (context.has(value)) return fail(`${label} aliases another record`);
16
+ context.add(value);
17
+ const prototype = reflect(() => Reflect.getPrototypeOf(value), label, fail);
18
+ const descriptors = reflect(() => Object.getOwnPropertyDescriptors(value), label, fail);
19
+ if (prototype !== Object.prototype && prototype !== null) return fail(`${label} must be a plain object`);
20
+ const captured = Object.create(null);
21
+ for (const key of Reflect.ownKeys(descriptors)) {
22
+ if (typeof key !== "string") return fail(`${label} contains a symbol field`);
23
+ const descriptor = descriptors[key];
24
+ if (!descriptor || !("value" in descriptor) || !descriptor.enumerable) return fail(`${label} contains a non-data or non-enumerable field`);
25
+ captured[key] = descriptor.value;
26
+ }
27
+ return captured;
28
+ }
29
+ function exactCapturedRecord(captured, keys, label, fail) {
30
+ const actualKeys = Object.keys(captured);
31
+ if (actualKeys.length !== keys.length || actualKeys.some((key) => !keys.includes(key))) return fail(`${label} contains missing or unknown fields`);
32
+ return captured;
33
+ }
34
+ `${"00".repeat(20)}`;
35
+ `${"00".repeat(20)}`;
36
+ `${"00".repeat(20)}`;
37
+ Math.floor(Number.MAX_SAFE_INTEGER / 32);
38
+ `${"00".repeat(20)}`;
39
+ Object.freeze([
40
+ "localhost",
41
+ "127.0.0.1",
42
+ "[::1]"
43
+ ]);
44
+ Object.freeze({
45
+ mode: "frontend",
46
+ providerId: null
47
+ });
48
+ `${"00".repeat(32)}`;
49
+ Object.freeze([
50
+ -32500,
51
+ -32501,
52
+ -32502,
53
+ -32503,
54
+ -32504,
55
+ -32505,
56
+ -32506,
57
+ -32507,
58
+ -32521
59
+ ]);
60
+ `${"00".repeat(20)}`;
61
+ new TextEncoder();
62
+ `${"00".repeat(20)}`;
63
+ const KERNEL_INSTALL_COMPONENTS = Object.freeze([
64
+ Object.freeze({
65
+ name: "moduleType",
66
+ type: "uint256"
67
+ }),
68
+ Object.freeze({
69
+ name: "module",
70
+ type: "address"
71
+ }),
72
+ Object.freeze({
73
+ name: "moduleData",
74
+ type: "bytes"
75
+ }),
76
+ Object.freeze({
77
+ name: "internalData",
78
+ type: "bytes"
79
+ })
80
+ ]);
81
+ Object.freeze({
82
+ EIP712Domain: Object.freeze([
83
+ Object.freeze({
84
+ name: "name",
85
+ type: "string"
86
+ }),
87
+ Object.freeze({
88
+ name: "version",
89
+ type: "string"
90
+ }),
91
+ Object.freeze({
92
+ name: "verifyingContract",
93
+ type: "address"
94
+ })
95
+ ]),
96
+ InstallPackages: Object.freeze([Object.freeze({
97
+ name: "nonce",
98
+ type: "uint256"
99
+ }), Object.freeze({
100
+ name: "packages",
101
+ type: "Install[]"
102
+ })]),
103
+ Install: KERNEL_INSTALL_COMPONENTS
104
+ });
105
+ parseAbi([
106
+ "function setNonce(uint192 nonceKey, uint64 seq)",
107
+ "function uninstallModule(uint256 moduleType, address module, bytes initData) payable",
108
+ "function execute(bytes32 mode, bytes executionData) payable"
109
+ ]);
110
+ //#endregion
111
+ //#region ../sdk/dist/approval-454uXgUF.js
112
+ var OaathKernelRuntimeError = class extends Error {
113
+ code;
114
+ constructor(code, message) {
115
+ super(message);
116
+ this.name = "OaathKernelRuntimeError";
117
+ this.code = code;
118
+ }
119
+ };
120
+ `${"00".repeat(20)}`;
121
+ `${"00".repeat(18)}`;
122
+ `${"00".repeat(20)}`;
123
+ `${"00".repeat(19)}`;
124
+ const KERNEL_V4_ENTRY_POINT_V07 = "0x0000000071727de22e5e9d8baf0edac6f37da032";
125
+ const KERNEL_V4_UUPS_IMPLEMENTATION_V07 = "0x3c504000d05c1e28687f70fca40a76f7ddda9952";
126
+ const KERNEL_V4_FACTORY_V07 = "0xe65c6a17bdb14070977b4ab70f1e7d9cdf441d53";
127
+ const KERNEL_V4_CREATE2_DEPLOYER = "0x4e59b44847b379578588920ca78fbf26c0b4956c";
128
+ const KERNEL_V4_ENTRY_POINT_V07_CODE_HASH = "0x8db5ff695839d655407cc8490bb7a5d82337a86a6b39c3f0258aa6c3b582fc58";
129
+ const KERNEL_V4_FACTORY_V07_CODE_HASH = "0xac398027b5068558aaf4fb5c986a6ae397e891d0c6e8d8181881385648ff629f";
130
+ const KERNEL_ENTRY_POINT_V07 = Object.freeze({
131
+ version: "0.7",
132
+ address: KERNEL_V4_ENTRY_POINT_V07,
133
+ runtimeCodeHash: KERNEL_V4_ENTRY_POINT_V07_CODE_HASH
134
+ });
135
+ const ENTRY_POINT = KERNEL_ENTRY_POINT_V07;
136
+ const implementationDeployment = (transactionHash, runtimeCodeHash) => Object.freeze({
137
+ deployer: KERNEL_V4_CREATE2_DEPLOYER,
138
+ transactionHash,
139
+ runtimeCodeHash
140
+ });
141
+ /**
142
+ * Chains with reviewed per-chain deployment evidence. This table pins extra
143
+ * proof; it is deliberately not an allowlist — every other chain resolves the
144
+ * same canonical CREATE2 profile through `kernelV4Deployment` and is verified
145
+ * at bind time from read evidence instead.
146
+ */
147
+ const PINNED_DEPLOYMENTS = Object.freeze({
148
+ 46630: Object.freeze({
149
+ profile: "kernel-v4-uups-entrypoint-v0.7",
150
+ kernelVersion: "0.4.0",
151
+ accountType: "uups",
152
+ chainId: 46630,
153
+ entryPoint: ENTRY_POINT,
154
+ implementation: KERNEL_V4_UUPS_IMPLEMENTATION_V07,
155
+ factory: KERNEL_V4_FACTORY_V07,
156
+ factoryRuntimeCodeHash: KERNEL_V4_FACTORY_V07_CODE_HASH,
157
+ create2Deployer: KERNEL_V4_CREATE2_DEPLOYER,
158
+ implementationDeployment: implementationDeployment("0xf662be20e4e8d3b0fcfb7bd08845ea89b45977d82aa315cb78530f013f4f2782", "0xaef18d8059fa2474272125891050e2e755f45db00c2668b45b7062b2a9579be0")
159
+ }),
160
+ 421614: Object.freeze({
161
+ profile: "kernel-v4-uups-entrypoint-v0.7",
162
+ kernelVersion: "0.4.0",
163
+ accountType: "uups",
164
+ chainId: 421614,
165
+ entryPoint: ENTRY_POINT,
166
+ implementation: KERNEL_V4_UUPS_IMPLEMENTATION_V07,
167
+ factory: KERNEL_V4_FACTORY_V07,
168
+ factoryRuntimeCodeHash: KERNEL_V4_FACTORY_V07_CODE_HASH,
169
+ create2Deployer: KERNEL_V4_CREATE2_DEPLOYER,
170
+ implementationDeployment: implementationDeployment("0xa63c36c76b536b1c11d75c68ac5ca15d4ce2c09a40e90ab29ff6601b4bdb0d33", "0xd0c42b1ed1738560c1b243fd9e5fc04b2eb5aa1be9962ac7f1f61696f9e6902b")
171
+ }),
172
+ 11155111: Object.freeze({
173
+ profile: "kernel-v4-uups-entrypoint-v0.7",
174
+ kernelVersion: "0.4.0",
175
+ accountType: "uups",
176
+ chainId: 11155111,
177
+ entryPoint: ENTRY_POINT,
178
+ implementation: KERNEL_V4_UUPS_IMPLEMENTATION_V07,
179
+ factory: KERNEL_V4_FACTORY_V07,
180
+ factoryRuntimeCodeHash: KERNEL_V4_FACTORY_V07_CODE_HASH,
181
+ create2Deployer: KERNEL_V4_CREATE2_DEPLOYER,
182
+ implementationDeployment: implementationDeployment("0x54528619ceafbcc656a7d0f7b637213f38d2fbe013a0e2909cfa3fef6dca7cc0", "0xb1f85627093213ec87a1484b6af7192651f4dbd6c5f9e9c0aff22e332c5ddb01")
183
+ })
184
+ });
185
+ const INSTALL_ARRAY_PARAMETER = {
186
+ name: "packages",
187
+ type: "tuple[]",
188
+ components: KERNEL_INSTALL_COMPONENTS
189
+ };
190
+ const FACTORY_ABI = [
191
+ {
192
+ type: "function",
193
+ name: "UUPS",
194
+ stateMutability: "view",
195
+ inputs: [],
196
+ outputs: [{
197
+ name: "",
198
+ type: "address"
199
+ }]
200
+ },
201
+ {
202
+ type: "function",
203
+ name: "getAddress",
204
+ stateMutability: "view",
205
+ inputs: [INSTALL_ARRAY_PARAMETER, {
206
+ name: "nonce",
207
+ type: "uint256"
208
+ }],
209
+ outputs: [{
210
+ name: "",
211
+ type: "address"
212
+ }]
213
+ },
214
+ {
215
+ type: "function",
216
+ name: "deploy",
217
+ stateMutability: "payable",
218
+ inputs: [INSTALL_ARRAY_PARAMETER, {
219
+ name: "nonce",
220
+ type: "uint256"
221
+ }],
222
+ outputs: [{
223
+ name: "",
224
+ type: "address"
225
+ }]
226
+ }
227
+ ];
228
+ function kernelError(code, message) {
229
+ throw new OaathKernelRuntimeError(code, message);
230
+ }
231
+ /**
232
+ * One owned frozen profile per chain, so `exactKernelDeployment`'s identity
233
+ * gate keeps refusing every foreign object. Growth is bounded by the distinct
234
+ * chain identifiers this process resolves, which its own configuration owns.
235
+ */
236
+ const OPEN_DEPLOYMENTS = /* @__PURE__ */ new Map();
237
+ /**
238
+ * Resolves the Kernel v4 deployment profile for one chain. Every EVM chain
239
+ * resolves: the profile's addresses are CREATE2 canonical and therefore
240
+ * chain-independent, and `bindKernelV4Account` proves the actual on-chain
241
+ * capability from read evidence before any account depends on it. Only a
242
+ * malformed chain identifier is unsupported; no chain is blocked here.
243
+ */
244
+ function kernelV4Deployment(chainId) {
245
+ if (typeof chainId !== "number" || !Number.isSafeInteger(chainId) || chainId < 1) return kernelError("kernel_runtime_chain_unsupported", "Kernel v4 chain is unsupported");
246
+ const pinned = PINNED_DEPLOYMENTS[chainId];
247
+ if (pinned) return pinned;
248
+ const open = OPEN_DEPLOYMENTS.get(chainId);
249
+ if (open) return open;
250
+ const created = Object.freeze({
251
+ profile: "kernel-v4-uups-entrypoint-v0.7",
252
+ kernelVersion: "0.4.0",
253
+ accountType: "uups",
254
+ chainId,
255
+ entryPoint: ENTRY_POINT,
256
+ implementation: KERNEL_V4_UUPS_IMPLEMENTATION_V07,
257
+ factory: KERNEL_V4_FACTORY_V07,
258
+ factoryRuntimeCodeHash: KERNEL_V4_FACTORY_V07_CODE_HASH,
259
+ create2Deployer: KERNEL_V4_CREATE2_DEPLOYER,
260
+ implementationDeployment: null
261
+ });
262
+ OPEN_DEPLOYMENTS.set(chainId, created);
263
+ return created;
264
+ }
265
+ function encodeKernelV4FactoryImplementationRead() {
266
+ return encodeFunctionData({
267
+ abi: FACTORY_ABI,
268
+ functionName: "UUPS"
269
+ });
270
+ }
271
+ Object.freeze({
272
+ standard: "0x00",
273
+ enable: "0x08",
274
+ "enable-replayable": "0x0c",
275
+ replayable: "0x40",
276
+ "enable-user-operation-replayable": "0x48",
277
+ "enable-all-replayable": "0x4c"
278
+ });
279
+ `${"00".repeat(20)}`;
280
+ function runtimeFail(code, message) {
281
+ throw new OaathKernelRuntimeError(code, message);
282
+ }
283
+ function inputInvalid(message) {
284
+ return runtimeFail("kernel_runtime_input_invalid", message);
285
+ }
286
+ /** Captures one plain record without asserting its exact key set yet. */
287
+ function captureInput(value, label, context) {
288
+ return captureRecord(value, label, context, inputInvalid);
289
+ }
290
+ /** Asserts the exact key set of an already captured record. */
291
+ function exactCaptured(captured, keys, label) {
292
+ return exactCapturedRecord(captured, keys, label, inputInvalid);
293
+ }
294
+ Object.freeze([
295
+ "kind",
296
+ "publicMaterial",
297
+ "resolveValidator",
298
+ "signerModule",
299
+ "dummySignature",
300
+ "sign",
301
+ "verify"
302
+ ]);
303
+ /**
304
+ * True for one credential kind this SDK authors. A reviewed kind resolves its
305
+ * modules from the pinned registry and may not carry caller-bound ones.
306
+ */
307
+ function isBuiltInKeyKind(value) {
308
+ return value === "ecdsa" || value === "p256" || value === "webauthn";
309
+ }
310
+ parseAbi([
311
+ "function currentNonce() view returns (uint32)",
312
+ "function validationConfig(bytes21) view returns (uint32 nonce, address hook)",
313
+ "function permissionConfig(bytes4) view returns ((bytes2 permissionFlag, address signer, bytes22[] policyData))",
314
+ "function installValidations(bytes21[] vIds, (uint32 nonce, address hook)[] configs, bytes[] validationData, bytes[] hookData)",
315
+ "function uninstallValidation(bytes21 vId, bytes deinitData, bytes hookDeinitData)"
316
+ ]);
317
+ /** Existing Kernel 0.3.3 accounts; this profile never derives a replacement address. */
318
+ const IMPLEMENTATION = "0xd6cedde84be40893d153be9d467cd6ad37875b28";
319
+ const FACTORY = "0x2577507b78c2008ff367261cb6285d44ba5ef2e9";
320
+ const ECDSA_VALIDATOR = "0x845adb2c711129d4f3966735ed98a9f09fc4ce57";
321
+ parseAbi([
322
+ "function accountId() view returns (string)",
323
+ "function entrypoint() view returns (address)",
324
+ "function rootValidator() view returns (bytes21)",
325
+ "function ecdsaValidatorStorage(address) view returns (address)",
326
+ "function currentNonce() view returns (uint32)",
327
+ "function validationConfig(bytes21) view returns (uint32 nonce, address hook)"
328
+ ]);
329
+ const deployments = /* @__PURE__ */ new Map();
330
+ function kernelV33Deployment(chainId) {
331
+ if (typeof chainId !== "number" || !Number.isSafeInteger(chainId) || chainId < 1) return inputInvalid("Kernel chain ID is invalid");
332
+ let deployment = deployments.get(chainId);
333
+ if (!deployment) {
334
+ deployment = Object.freeze({
335
+ profile: "kernel-v3.3-entrypoint-v0.7",
336
+ kernelVersion: "0.3.3",
337
+ chainId,
338
+ entryPoint: KERNEL_ENTRY_POINT_V07,
339
+ implementation: IMPLEMENTATION,
340
+ factory: FACTORY,
341
+ ecdsaValidator: ECDSA_VALIDATOR,
342
+ create2Deployer: KERNEL_V4_CREATE2_DEPLOYER
343
+ });
344
+ deployments.set(chainId, deployment);
345
+ }
346
+ return deployment;
347
+ }
348
+ keccak256(stringToHex("kernel.replayable.signature"));
349
+ Object.freeze({ p256: "0x9906ab44ff795883c5a725687a2705be4118b0f3" });
350
+ /**
351
+ * Permission signer modules (moduleType 6) bound per key kind and deployed through
352
+ * KERNEL_V4_CREATE2_DEPLOYER with a zero salt, which fixes each address on every
353
+ * chain. contracts/artifacts/KernelV4Runtime.json carries each exact deployment
354
+ * input, and the local Kernel composition proof deploys it and shows the code
355
+ * landing on the address pinned here.
356
+ *
357
+ * - ecdsa: ZeroDev's verified src/ECDSASigner.sol deployment on Arbitrum Sepolia.
358
+ * The fixture payload was extracted from creation transaction 0x8e282e...7a197,
359
+ * derives 0x6a6f...d4ff, and reproduces the deployed runtime code. onInstall takes
360
+ * the 20-byte signer address, exactly the public material kernel/key/ecdsa.ts
361
+ * publishes.
362
+ * - webauthn: the reviewed src/signers/WebAuthnSigner.sol from
363
+ * zerodevapp/kernel-7579-plugins at commit 332deed6eeef3d6279cde50aa1d51eff53728bd4.
364
+ * onInstall decodes
365
+ * (uint256 pubKeyX, uint256 pubKeyY, bytes32), exactly the public material
366
+ * kernel/key/webauthn.ts publishes.
367
+ *
368
+ * Raw P-256 carries no entry: the reviewed plugin set ships only the WebAuthn
369
+ * assertion signer, so a raw P-256 permission signer fails closed. Re-checked on
370
+ * 2026-08-04 against that repository's master at 332deed: src/signers holds
371
+ * ECDSASigner, WeightedECDSASigner and WebAuthnSigner only, and its P256Signer.sol
372
+ * still exists solely on the unmerged branch feat/batch2, which is not reviewed
373
+ * provenance. A raw P-256 owner therefore has root authority through the pinned
374
+ * validator above while a raw P-256 session key does not exist; a session under a
375
+ * P-256 owner uses an ECDSA session key, which is the iPhone flow's shape.
376
+ */
377
+ const PINNED_SIGNERS = Object.freeze({
378
+ ecdsa: "0x6a6f069e2a08c2468e7724ab3250cdbfba14d4ff",
379
+ webauthn: "0x8b2df925aa16071fcdf0053768420e242935ac65"
380
+ });
381
+ /**
382
+ * ZeroDev's reviewed CallPolicy (moduleType 5), which bounds every permitted
383
+ * (callType, target, selector) triple and the native value each may move.
384
+ * Package `zerodev-kernel-call-policy` 0.0.4, source mirrored at
385
+ * https://github.com/cartesi/erc-4337-devnet
386
+ * (zerodev/kernel-call-policy/0.0.4/src/CallPolicy.sol) together with its exact
387
+ * Kernel v3 dependency sources and build profile (solc 0.8.24+commit.e11b9ed9,
388
+ * via-IR, optimizer 200 runs, EVM paris, bytecode hash and CBOR metadata
389
+ * disabled). Recompiling that source with that profile reproduces the package's
390
+ * own cannon `expected` address bit for bit, so this address is ZeroDev's, not
391
+ * ours. It is deployed through KERNEL_V4_CREATE2_DEPLOYER with a zero salt, so
392
+ * one address holds on every chain.
393
+ *
394
+ * Kernel v4 and v3 declare the identical IPolicy: checkUserOpPolicy(bytes32 id,
395
+ * PackedUserOperation) and PolicyBase.onInstall(bytes32 id ‖ data). The module
396
+ * decodes the outer execute(bytes32,bytes) calldata, which is why permission
397
+ * validations must not wrap their calldata in executeUserOp.
398
+ */
399
+ const CALL_POLICY = "0x9a52283276a0ec8740df50bf01b28a80d880eaf2";
400
+ /**
401
+ * OAAth's Kernel v4 validity policy (moduleType 5). Its accepted deterministic
402
+ * artifact lives in @oaath/contracts and pins the source, compiler profile,
403
+ * zero-salt singleton-deployer input, address and runtime hash. The address alone
404
+ * is not deployment evidence: a session bind reads the action chain and requires
405
+ * this exact runtime hash before the permission can prepare a requested range.
406
+ *
407
+ * onInstall takes `id ‖ abi.encode(uint48 validAfter,uint48 validUntil)`, exactly
408
+ * what permission/compile.ts emits. A zero execution-mode selector returns that
409
+ * immutable ceiling; selector 0x1ba8f415 returns only a signed per-operation
410
+ * subrange. checkSignaturePolicy always fails, keeping the module execution-only.
411
+ */
412
+ const OAATH_KERNEL_V4_VALIDITY_POLICY = "0x828ef0aa6d7e90dd39bb855afe9d9b4f9bd30152";
413
+ /**
414
+ * ZeroDev's reviewed RateLimitPolicy (moduleType 5), which caps how many
415
+ * UserOperations one permission may validate on one chain. Package
416
+ * `zerodev-kernel-ratelimit-policy` 0.0.1 (the cannon package name; the mirror
417
+ * directory is kernel-rate-limit-policy), source mirrored at
418
+ * https://github.com/cartesi/erc-4337-devnet
419
+ * (zerodev/kernel-rate-limit-policy/0.0.1/src/RateLimitPolicy.sol) with its own
420
+ * vendored Kernel v3 dependencies and the same build profile, which likewise
421
+ * reproduces the package's cannon `expected` address.
422
+ *
423
+ * onInstall reads `id ‖ interval ‖ count ‖ startAt`, three packed uint48s, and
424
+ * checkUserOpPolicy decrements `count` on every operation it validates, returning
425
+ * 1 — Kernel's signature-failure sentinel — once the count is exhausted. With
426
+ * interval and startAt zero it is a pure count cap that adds no time bound.
427
+ *
428
+ * The mapping from the Grant policy is deliberately conservative: an approved
429
+ * perChainOperationLimit counts finalized operations, while this module counts
430
+ * validated ones, so an operation whose execution reverts still consumes a slot.
431
+ * The on-chain cap is therefore never more permissive than the approved one.
432
+ */
433
+ const RATE_LIMIT_POLICY = "0xf63d4139b25c836334edd76641356c6b74c86873";
434
+ /**
435
+ * Fixed-window RateLimitPolicy from kernel-7579-plugins a267d794, compiled for
436
+ * Paris with solc 0.8.30, via-IR, optimizer 200, no CBOR metadata. The complete
437
+ * standard JSON input and zero-salt deployment artifact are retained in the SDK
438
+ * fixtures. This is a distinct deployment from the old non-resetting count cap
439
+ * and ZeroDev's historical reset-module address. Availability must be proved on
440
+ * the action chain; a pin is not evidence that the module has been deployed.
441
+ */
442
+ const OAATH_KERNEL_RATE_LIMIT_POLICY = "0xe2663e2f94ef2dc11cc06a7914a037d78a0652dc";
443
+ const OAATH_KERNEL_RATE_LIMIT_POLICY_RUNTIME_CODE_HASH = "0x6bb7a4d8507d7824e806f730683d532961dc2117ce530a8216765ddd2b1f17b5";
444
+ /**
445
+ * Policy modules bound per policy axis. CallPolicy enforces the call and value
446
+ * axes together, in one module, from one configuration. A session installs one
447
+ * package per distinct module, so a scope spanning several axes installs several
448
+ * policies.
449
+ *
450
+ * All four axes are bound, which took one SDK-side fix. Recorded history, because
451
+ * the failure mode is not obvious from the ABI: a permission carrying two policy
452
+ * packages installed correctly — `validationInfo(vId)` read
453
+ * `policies = [CallPolicy, OaathKernelV4ValidityPolicy]`, `signer =
454
+ * ECDSASigner`, hook = the no-hook sentinel — yet its first operation was
455
+ * rejected with EntryPoint
456
+ * `FailedOpWithRevert(0, "AA23 reverted", 0x8baa579f)`, Kernel's
457
+ * `InvalidSignature()`, because `ValidationManager._validateUserOpPermission`
458
+ * requires `permissionSignature.signatures.length == vInfo.policies.length + 1`
459
+ * and sessionOperator's encodeSignature emitted a fixed two-slice envelope
460
+ * regardless of how many policy packages resolvePackages installed. The envelope
461
+ * now derives its empty policy slices from the same captured compiled policy that
462
+ * resolvePackages installs from, so the two counts cannot drift again; the local
463
+ * composition proof executes a two-package session, a post-expiry AA22 rejection
464
+ * and an exhausted operation count on-chain.
465
+ */
466
+ const PINNED_POLICIES = Object.freeze({
467
+ call: CALL_POLICY,
468
+ expiry: OAATH_KERNEL_V4_VALIDITY_POLICY,
469
+ "operation-limit": RATE_LIMIT_POLICY,
470
+ "rate-limit": OAATH_KERNEL_RATE_LIMIT_POLICY
471
+ });
472
+ /**
473
+ * The reviewed permission signer module bound to one key kind, or null when none
474
+ * is. A consumer-authored kind resolves null here by construction, which is what
475
+ * makes a session refuse to compose unless its own profile bound a signer module.
476
+ */
477
+ function pinnedSignerModule(kind) {
478
+ return (isBuiltInKeyKind(kind) ? PINNED_SIGNERS[kind] : null) ?? null;
479
+ }
480
+ /** The reviewed policy module bound to one policy axis, or null when none is. */
481
+ function pinnedPolicyModule(kind) {
482
+ return PINNED_POLICIES[kind] ?? null;
483
+ }
484
+ /**
485
+ * The version-agnostic Kernel account entry points. Kernel version and
486
+ * EntryPoint version are optional settings: a deployment is selected with
487
+ * defaults, an existing account's deployment is detected from its onchain
488
+ * implementation, and an explicit deployment that disagrees with the account
489
+ * fails with `kernel_runtime_deployment_mismatch` before anything is signed. It
490
+ * never silently switches versions. Each version's evidence rules stay owned by
491
+ * its own binder (`kernel-v4.ts`, `v33.ts`); this module only selects one.
492
+ *
493
+ * @author taek <leekt216@gmail.com>
494
+ */
495
+ function deploymentFor(chainId, version) {
496
+ if (typeof chainId !== "number" || !Number.isSafeInteger(chainId) || chainId < 1) return inputInvalid("Kernel chain ID is invalid");
497
+ if (version === "0.3.3") return kernelV33Deployment(chainId);
498
+ if (version === "0.4.0") return kernelV4Deployment(chainId);
499
+ return inputInvalid("Kernel version is unsupported");
500
+ }
501
+ function kernelDeployment(value) {
502
+ const captured = captureInput(value, "Kernel deployment selection", /* @__PURE__ */ new WeakSet());
503
+ const record = exactCaptured(captured, ["chainId", ...["kernelVersion", "entryPoint"].filter((key) => Object.hasOwn(captured, key))], "Kernel deployment selection");
504
+ const deployment = deploymentFor(record.chainId, record.kernelVersion ?? "0.4.0");
505
+ if (record.entryPoint !== void 0 && record.entryPoint !== deployment.entryPoint.version) return inputInvalid("Kernel EntryPoint version is unsupported");
506
+ return deployment;
507
+ }
508
+ //#endregion
509
+ //#region ../contracts/artifacts/KernelV4Runtime.json
510
+ var kernelUups = {
511
+ "transactionHash": "0xa63c36c76b536b1c11d75c68ac5ca15d4ce2c09a40e90ab29ff6601b4bdb0d33",
512
+ "deploymentInput": "0x0000000000000000000000000000000000000000000000000000000000000000610160604052346101af576155e16020813803918261001d816101b3565b9384928339810103126101af57516001600160a01b03811681036101af57306080524660a05260a061004f60406101b3565b6006815260208101906512d95c9b995b60d21b825261006e60406101b3565b91600583526020830191640302e342e360dc1b8352519020915190208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301526040820152466060820152306080820152206101005261012052306101405263409feecd1954600181166101a25760011c6002600160401b03190161015d575b6040516153f490816101ed823960805181613a3c015260a05181613a5f015260c05181613acf015260e05181613af501526101005181613a1b015261012051818181611e8e0152612cd60152610140518181816106de01526107ea0152f35b6002600160411b0363409feecd19556001600160401b0360209081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29080a16100fe565b63f92ee8a95f526004601cfd5b5f80fd5b6040519190601f01601f191682016001600160401b038111838210176101d857604052565b634e487b7160e01b5f52604160045260245ffdfe6080604052600436101561002e575b36156100245761001c612baf565b602081519101f35b61002c611b0d565b005b5f3560e01c8063112d3a7d146101fd5780631626ba7e146101f857806319822f7c146101f357806332b3a5dc146101ee57806349eadd18146101e95780634f1ef286146101e457806352d1902d146101df57806357b3a5f4146101da578063640890f4146101d5578063721e67f4146101d057806375c29cf6146101cb57806376babb15146101c65780637adc576e146101c15780637b103999146101bc57806384b0196e146101b75780638dd7712f146101b257806390ef8862146101ad5780639517e29f146101a85780639cfd7cff146101a3578063a706cd331461019e578063a71763a814610199578063ba103dff14610194578063d03c79141461018f578063d691c9641461018a578063d86f2b3c14610185578063e08c6ea214610180578063e9ae5c531461017b578063ebf0c717146101765763f2dc691d0361000e57611379565b611343565b611329565b6112e4565b611259565b61118a565b61116c565b6110c3565b610fd5565b610f3b565b610eee565b610db3565b610d7e565b610cc7565b610c21565b610bc9565b610b55565b610b1b565b610a3b565b610945565b61092b565b61084a565b6107d7565b6106a3565b610446565b610388565b610320565b6102e5565b610290565b6001600160a01b0381160361021357565b5f80fd5b359061022282610202565b565b9181601f84011215610213578235916001600160401b038311610213576020838186019501011161021357565b6060600319820112610213576004359160243561026d81610202565b91604435906001600160401b0382116102135761028c91600401610224565b9091565b346102135760206102ac6102a336610251565b92919091611482565b6040519015158152f35b9060406003198301126102135760043591602435906001600160401b0382116102135761028c91600401610224565b346102135760206102fe6102f8366102b6565b91611b74565b6040516001600160e01b03199091168152f35b90816101209103126102135790565b6060366003190112610213576004356001600160401b0381116102135761034d6020913690600401610311565b60243590610367604435928392610362611e8b565b612037565b91610376575b50604051908152f35b3490349034903490335af1505f61036d565b6020366003190112610213576004356001600160401b03811690818103610213576103b1611e8b565b6103d75f5160206153545f395f51905f5254926001600160401b038460a01c161061228c565b67ffffffffffffffff60a01b1990911660a09190911b67ffffffffffffffff60a01b16175f5160206153545f395f51905f5255005b9181601f84011215610213578235916001600160401b038311610213576020808501948460051b01011161021357565b8015150361021357565b6060366003190112610213576004356001600160401b0381116102135761047190369060040161040c565b6024359061047e8261043c565b604435916001600160401b038311610213576104e16104a46104dc943690600401610224565b9490936104af611e8b565b6104ba811515611648565b5f5160206153d45f395f51905f525460581b966104d782826122c2565b61165e565b61237a565b6104e757005b6104f86104f3846113e5565b611736565b6001600160f81b03198416600160f81b0361056c5750604051638a91b0e360e01b6020820190815261002c9460581c6001600160a01b0316935f9384939161055791839161054991602484016118c7565b03601f198101835282611705565b519082855af1506105666118f3565b506124ec565b9291506001600160f81b03198216600160f91b03610694578061058e916117d0565b9092606081016105a96105a2825151611819565b8414611827565b805151805b61062e575050925f806106299361060e826105496105ed604061002c9b01976105dd895160018060a01b031690565b956105e781611922565b91611890565b6040949194519283916020830196638a91b0e360e01b8852602484016118c7565b51925af15061061b6118f3565b50516001600160a01b031690565b6124a0565b61068b8561068661065e61065e5f808c610671826105496105ed8f8d908f61066b9051928619019a8b809461184a565b516001600160a01b031690565b96611890565b51925af15061067e6118f3565b50865161184a565b612414565b5f1901806105ae565b631b04366160e11b5f5260045ffd5b6040366003190112610213576004356106bb81610202565b6024356001600160401b038111610213576106da903690600401610224565b90917f000000000000000000000000000000000000000000000000000000000000000030146107ca5761070b611e8b565b60018060a01b03163d5f526352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc602060016004601d855afa51036107bc57807fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a281817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5561079f57005b815f926040519485378338925af4156107b457005b3d5f823e3d90fd5b6355299b496001526004601dfd5b639f03a0265f526004601cfd5b34610213575f36600319011261021357307f0000000000000000000000000000000000000000000000000000000000000000036107ca5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b6001600160e01b031981160361021357565b34610213576020366003190112610213576108fd61088b60043561086d81610838565b5f6040805161087b816116af565b8281528260208201520152611b3e565b60016040519161089a836116af565b805460a083901b839003168084529101546001600160a01b0380821660208086019182526001600160f81b031960589490941b84166040968701908152865195841686529151909216918401919091525116918101919091529081906060820190565b0390f35b602060031982011261021357600435906001600160401b0382116102135761028c9160040161040c565b61002c61093736610901565b90610940611e8b565b6122c2565b3461021357602036600319011261021357602061098360043561096781610202565b5f604051610974816116cf565b526001600160a01b031661144a565b60405190610990826116cf565b546001600160a01b031690819052604051908152f35b600435906001600160581b03198216820361021357565b9060208252602060c0606060a085019363ffffffff8151168487015260018060a01b038482015116604087015260018060a01b03604082015116828701520151936080808201528451809452019201905f5b818110610a1c5750505090565b82516001600160a01b0316845260209384019390920191600101610a0f565b3461021357602036600319011261021357610a7c610a576109a6565b606080604051610a66816116ea565b5f81525f60208201525f604082015201526113e5565b600260405191610a8b836116ea565b805463ffffffff8116845260018060a01b039060201c16602084015260018060a01b03600182015416604084015201906040519182602082549182815201915f5260205f20905f5b818110610afc576108fd8587610aeb81880382611705565b6060820152604051918291826109bd565b82546001600160a01b0316845260209093019260019283019201610ad3565b60203660031901126102135761002c610b326109a6565b610b3a611e8b565b612537565b600435906001600160c01b038216820361021357565b604036600319011261021357610b69610b3f565b6024356001600160401b0381168082036102135761002c92610ba9610bae92610b90611e8b565b6001600160401b03610ba184611ad5565b54161061228c565b611ad5565b906001600160401b03166001600160401b0319825416179055565b34610213575f366003190112610213575f5160206153545f395f51905f52546040516001600160a01b039091168152602090f35b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b34610213575f36600319011261021357610c71610c3c611930565b9496909293610c6360405198899860ff60f81b16895260e060208a015260e0890190610bfd565b908782036040890152610bfd565b92606086015260018060a01b0316608085015260a084015282810360c0840152602080835192838152019201905f5b818110610cae575050500390f35b8251845285945060209384019390920191600101610ca0565b6040366003190112610213576004356001600160401b03811161021357610cf2903690600401610311565b602435610cfd611e8b565b5c9060608101610d0d818361185e565b8060049392931161021357610d3492610d2e916003190190600401866127cc565b9261185e565b80600411610213575f916004610d5884936040519384938492600319019101611a51565b0390305af491610d666118f3565b9215610d765761002c9250612835565b825160208401fd5b34610213575f3660031901126102135760206001600160401b035f5160206153545f395f51905f525460a01c16604051908152f35b610de2610dbf36610251565b50610dcb929192611e8b565b610dd5818061185e565b949091602081019061185e565b909460018403610e2657905f5160206153745f395f51905f5295610e0b9392600e935b87613399565b604080519182526001600160a01b03929092166020820152a1005b60028403610e4b57905f5160206153745f395f51905f5295610e0b9392600893610e05565b60038403610e7057905f5160206153745f395f51905f5295610e0b9392600c93610e05565b60048403610e9557905f5160206153745f395f51905f5295610e0b9392600a93610e05565b60058403610eba57905f5160206153745f395f51905f5295610e0b9392600f93610e05565b919060068403610edf575f5160206153745f395f51905f5295610e0b93601093610e05565b63d623472560e01b5f5260045ffd5b34610213575f366003190112610213576108fd604051610f0f604082611705565b600b81526a1ad95c9b995b0b9d8c0b8d60aa1b6020820152604051918291602083526020830190610bfd565b608036600319011261021357600435610f538161043c565b602435906044356001600160401b03811161021357610f7690369060040161040c565b9190926064356001600160401b03811161021357610fad82610fb8948688610fa5610fb3963690600401610224565b949093612d3d565b91612eae565b6133e4565b15610fc65761002c916122c2565b63f584bf1360e01b5f5260045ffd5b610fe1610dbf36610251565b90946001840361100a57905f5160206153945f395f51905f5295610e0b93926011935b8761351b565b6002840361102f57905f5160206153945f395f51905f5295610e0b9392600993611004565b6003840361105457905f5160206153945f395f51905f5295610e0b9392600d93611004565b6004840361107957905f5160206153945f395f51905f5295610e0b9392600b93611004565b6005840361109e57905f5160206153945f395f51905f5295610e0b9392601293611004565b919060068403610edf575f5160206153945f395f51905f5295610e0b93601393611004565b6110cc36610901565b63409feecd1980928154806003845561113a575b506104dc836110f461110494951515611648565b6110fe818461165e565b926122c2565b61110a57005b6002905560016020527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602080a1005b9150600182811c14303b101561115f576104dc936111049260ff1b1b938492506110e0565b63f92ee8a95f526004601cfd5b346102135760203660031901126102135760206102ac600435611a5e565b6111ed6111f3611199366102b6565b335f9081527fc98f19fae81314cbf0302e1e3c0554f60c259fab8e2d5d392893489d40eb004560205260409020546001600160a01b031694916111dd861515611e76565b6111e7368761272e565b93612ae1565b92612835565b6040518091602082016020835281518091526040830190602060408260051b8601019301915f905b82821061122a57505050500390f35b919360019193955060206112498192603f198a82030186528851610bfd565b960192019201859493919261121b565b3461021357602036600319011261021357611272610b3f565b6001600160401b0361128382611ad5565b5416906001600160401b035f5160206153545f395f51905f525460a01c168281116112d5575b506001600160401b039081199060401b16911681018091116112d057604051908152602090f35b611805565b91506001600160401b036112a9565b6040366003190112610213576112f86109a6565b602435906001600160401b0382116102135761131b61002c923690600401610224565b91611324611e8b565b6129a9565b61002c611335366102b6565b9161133e611e8b565b612ae1565b34610213575f3660031901126102135760205f5160206153d45f395f51905f525460581b604051906001600160581b0319168152f35b346102135760203660031901126102135760206004356007811090816113a5575b506040519015158152f35b905015155f61139a565b356001600160e01b03198116929190600482106113ca575050565b6001600160e01b031960049290920360031b82901b16169150565b6001600160581b0319165f527fded5d420c407eac3c615e6abe13ab4a0bd7173e5045ea543765b46f0df6e260d60205260405f2090565b634e487b7160e01b5f52603260045260245ffd5b8054821015611445575f5260205f2001905f90565b61141c565b6001600160a01b03165f9081527fc98f19fae81314cbf0302e1e3c0554f60c259fab8e2d5d392893489d40eb00456020526040902090565b90929190600181036114d757506001600160a01b03926114d192506114c1915060581b600160581b600160f81b0316600160f81b176113e5565b6113e5565b5460201c6001600160a01b031690565b16151590565b6002810361151757506001600160a01b03926114d1925061150b91506114fe90841661144a565b546001600160a01b031690565b6001600160a01b031690565b600381036115565750611537611532611545936001936113af565b611b3e565b01546001600160a01b031690565b6001600160a01b0390811691161490565b6004810361158d575050506001600160a01b03165f9081525f5160206153b45f395f51905f52602052604090205460ff1690565b90565b6005810361162957506115b66115a96115cc936114bc936113af565b6001600160e01b03191690565b60081c600160f91b1764ffffffffff60d81b1690565b600201805491905f5b8381106115e457505050505f90565b6116066115f18284611430565b905460039190911b1c6001600160a01b031690565b6001600160a01b03848116911614611620576001016115d5565b50505050600190565b600603610edf576115376114bc6115b66115a9611545956001956113af565b1561164f57565b63f92ee8a960e01b5f5260045ffd5b901561144557803590607e1981360301821215610213570190565b91908110156114455760051b81013590607e1981360301821215610213570190565b634e487b7160e01b5f52604160045260245ffd5b606081019081106001600160401b038211176116ca57604052565b61169b565b602081019081106001600160401b038211176116ca57604052565b608081019081106001600160401b038211176116ca57604052565b90601f801991011681019081106001600160401b038211176116ca57604052565b6040519061022261012083611705565b90604051611743816116ea565b60028193805463ffffffff8116845260018060a01b039060201c16602084015260018060a01b036001820154166040840152019060405180928391602082549182815201915f5260205f20905f5b8181106117ae57505050606092916117aa910384611705565b0152565b82546001600160a01b0316845286945060209093019260019283019201611791565b903590601e198136030182121561021357018035906001600160401b03821161021357602001918160051b3603831361021357565b634e487b7160e01b5f52601160045260245ffd5b90600182018092116112d057565b1561182e57565b630dfe930960e41b5f5260045ffd5b8051156114455760200190565b80518210156114455760209160051b010190565b903590601e198136030182121561021357018035906001600160401b0382116102135760200191813603831361021357565b908210156114455761028c9160051b81019061185e565b908060209392818452848401375f828201840152601f01601f1916010190565b91602061158a9381815201916118a7565b6001600160401b0381116116ca57601f01601f191660200190565b3d1561191d573d90611904826118d8565b916119126040519384611705565b82523d5f602084013e565b606090565b5f198101919082116112d057565b600f60f81b9061193e612673565b9091469030905f90606090565b906004116102135790600490565b909291928360041161021357831161021357600401916003190190565b600411610213575f90600490565b906019116102135760050190601490565b909291928360141161021357831161021357601401916013190190565b906014116102135790601490565b906006116102135760020190600490565b909291928360061161021357831161021357600601916005190190565b906016116102135760020190601490565b909291928360161161021357831161021357601601916015190190565b909291928360021161021357831161021357600201916001190190565b90939293848311610213578411610213578101920390565b908092918237015f815290565b6001600160f81b03198181169160011a60f81b168015908115611ac7575b5015611ac2578015908115611ab4575b8115611aa2575b5015611a9e57600190565b5f90565b6001600160f81b03191490505f611a93565b600160f81b81149150611a8c565b505f90565b600160f81b1490505f611a7c565b6001600160c01b03165f9081527f9bc558e75ed0a57385e96d6b87fd2864d462eed29668be6fed742168fd90ab106020526040902090565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b63ffffffff60e01b165f527f550d18e77e0b3e646dcc27a9961c73d7867a7c5f6c2c65424629353cdc97dcc060205260405f2090565b9091928315611e57575b82848101601f19013561649261ffff30801c19040214611e42575b5083918094309430611df3575b604051600119838301013560f01c95600e82019787918881038501986041198a016119015f526040816020378115826042018410178d6042601e201817611db1576d0a8f2e0cac888c2e8c2a6d2cedc560931b86529a9b508b9a6001198b019a828c8e378287016028600e8201526029600d8201515f1a03611d53575b50509b6a07fffffe0000000000000160281b909b9a9b515f1a1c5b8a515f1a60288114611c605760019b909b019a65120100000001901c17611c3e565b50919293948181989b6040899c9f611d199c9f95605c967f20636f6e74656e74732c737472696e67206e616d652c737472696e670000000085527f2076657273696f6e2c75696e7432353620636861696e49642c61646472657373601c8601527f20766572696679696e67436f6e74726163742c627974657333322073616c7429603c8601528785013788370103018620835260e08320604052600116604201601e2092604119910301935b60405215611d45576146ca565b928315611d33575b505050155f03631626ba7e1760e01b90565b611d3d93506137ce565b5f8080611d21565b611d4e90613a19565b6146ca565b839e919360015f5b01906029600d83850301515f1a149082101115611d7c578f90600190611d5b565b60289f6028916a07fffffe0000000000000160281b94935080604081600e940398896041199101010185378a0101539d611c23565b50509497505050611d199396508194975f907f983e65e5148e570cd828ead231ee759a8d7958721a768f93bc4483ba005c32de5f5260205260405f2091611d0c565b9450611dfd611930565b509399945091604051996020815191012060408b01526020815191012060608a0152608089015260018060a01b031660a088015260c087015260e08601604052611ba6565b6040810135018035945060200192505f611b99565b61773961ffff851904028203611b7e57637739000160e01b9350915050565b15611e7d57565b6282b42960e81b5f5260045ffd5b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316148015611ec7575b61022290611e76565b50333014611ebe565b15611ed85750565b633ac1612360e01b5f526001600160581b03191660045260245ffd5b15611efb57565b638e1817ff60e01b5f5260045ffd5b929192611f16826118d8565b91611f246040519384611705565b829481845281830111610213578281602093845f960137010152565b9080601f830112156102135781602061158a93359101611f0a565b9190916101208184031261021357611f71611726565b92611f7b82610217565b84526020820135602085015260408201356001600160401b0381116102135781611fa6918401611f40565b604085015260608201356001600160401b0381116102135781611fca918401611f40565b60608501526080820135608085015260a082013560a085015260c082013560c085015260e08201356001600160401b038111610213578161200c918401611f40565b60e08501526101008201356001600160401b0381116102135761202f9201611f40565b610100830152565b5f906120466020820135612d0d565b9291909461205861010084018461185e565b9690949085600160fb1b85166121ee575b50926120bc926120ae61158a9996938661208c6120ef9a9860ff60f81b16151590565b6121c9575b6001600160f81b03198116158015612188575b156120ff57612fa9565b949092600160fe1b16151590565b156120f557506120e96120e06120da6120d485613f9d565b85614031565b3361423a565b925b3690611f5b565b92615289565b9061430a565b6120e990926120e2565b61214460608701612119612113828a61185e565b9061194b565b638dd7712f60e01b916001600160e01b031991612135916113af565b1614908161215a575b50611ef4565b61215361150b6114c1846113e5565b845d612fa9565b612182915061217661216f61217c928b61185e565b8091611959565b906113af565b84612f52565b5f61213e565b506121a561219f61217661211360608a018a61185e565b83612f52565b80156120a4575060016001600160a01b036121c26114c1856113e5565b16146120a4565b6121e9826001600160a01b036121e16114c1836113e5565b161515611ed0565b612091565b803598509096509094506020810161222188600160fa1b8616151561221384866117d0565b90610fa5604088018861185e565b976001600160a01b03891660011461228157926120ae61226f61158a9a99979461226561225f6120ef9b99966122596120bc9a612eae565b836117d0565b906122c2565b606081019061185e565b9690969a509396929597505092612069565b505050505050505090565b1561229357565b633ab3447f60e11b5f5260045ffd5b3561158a81610202565b156122b357565b63cb4492af60e01b5f5260045ffd5b905f5b81811061232d575050506001600160581b03196122f36122e65f5c60581b90565b6001600160581b03191690565b16158015612305575b610222906122ac565b506102226001600160a01b0361232360016115375f5c60581b6113e5565b16151590506122fc565b8061237461233e6001938587611679565b803561236c60208301359261235284610202565b61235f604082018261185e565b929091606081019061185e565b9490936128aa565b016122c5565b8035600181036123b05750610b3a61239a61150b602061022294016122a2565b60581b600160f81b176001600160581b03191690565b600581149081156123f3575b5015610694578060606123d092019061185e565b60041161021357610222903560081c63ffffffff60d81b16600160f91b17612537565b60069150145f6123bc565b1561240557565b63b9ac715d60e01b5f5260045ffd5b906124206002916113e5565b0180546124515f198201936124358585611430565b905460039190911b1c6001600160a01b039081169116146123fe565b15612476576124608282611430565b81549060018060a01b039060031b1b1916905555565b634e487b7160e01b5f52603160045260245ffd5b1561249157565b633026a01b60e21b5f5260045ffd5b90610222916124d960016124b3846113e5565b6124c16002820154156123fe565b01805490926001600160a01b0390811691161461248a565b80546001600160a01b031916905561302f565b6102229060581b600160581b600160f81b0316600160f81b1761302f565b1561251157565b6361c4e91b60e11b5f5260045ffd5b63ffffffff1663ffffffff81146112d05760010190565b6001600160581b0319811615908115809261266c575b1561069457610222916001600160f81b03198216600160f81b148015612655575b801561264e575b61257e9061250a565b612631575b5f5160206153d45f395f51905f525460581b6001600160581b0319811615158061261a575b6125de575b5060581c6001600160581b0360a81b5f5160206153d45f395f51905f525416175f5160206153d45f395f51905f5255565b6125ea612614916113e5565b6126006125fb825463ffffffff1690565b612520565b63ffffffff1663ffffffff19825416179055565b5f6125ad565b506001600160581b031980821690831614156125a8565b612649816001600160a01b036121e16114c1836113e5565b612583565b505f612575565b506001600160f81b03198216600160f91b1461256e565b505f61254d565b60409081516126828382611705565b600681526512d95c9b995b60d21b6020820152916126a281519182611705565b60058152640302e342e360dc1b602082015290565b9291926126c3826118d8565b916126d16040519384611705565b829481845281830111610213578281602093845f96015e010152565b602081830312610213578051906001600160401b03821161021357019080601f8301121561021357815161158a926020016126b7565b6040513d5f823e3d90fd5b606092916001600160a01b03909116906001821415806127c3575b612751575050565b60405163d68f602560e01b8152336004820152346024820152606060448201529293505f91839182908490829061278d906064830190846118a7565b03925af19081156127be575f916127a2575090565b61158a91503d805f833e6127b68183611705565b8101906126ed565b612723565b50811515612749565b606093926001600160a01b039091169060018214158061282c575b6127f057505050565b60405163d68f602560e01b8152336004820152346024820152606060448201529394505f9284929183918591839161278d9160648401916118a7565b508115156127e7565b6001600160a01b03166001811415806128a1575b612851575050565b803b1561021357604051630b9dfbed60e11b815260206004820152915f918391829084908290612885906024830190610bfd565b03925af180156127be57612897575b50565b5f61022291611705565b50801515612849565b9394909392600184036128f057905f5160206153745f395f51905f52956128d59392600e9387613399565b604080519182526001600160a01b03929092166020820152a1565b6002840361291557905f5160206153745f395f51905f52956128d59392600893610e05565b6003840361293a57905f5160206153745f395f51905f52956128d59392600c93610e05565b6004840361295f57905f5160206153745f395f51905f52956128d59392600a93610e05565b6005840361298457905f5160206153745f395f51905f52956128d59392600f93610e05565b919060068403610edf575f5160206153745f395f51905f52956128d593601093610e05565b906129b76003841615611827565b6129c0826113e5565b926129ea6129d463ffffffff865416612520565b855463ffffffff191663ffffffff821617909555565b60048110156129f95750505050565b612a06612176828461194b565b6001600160e01b03198116638dd7712f60e01b14801590612ab3575b15612aa457612a9f92612a9a86612a858594612a6f896001600160581b0319165f527fded5d420c407eac3c615e6abe13ab4a0bd7173e5045ea543765b46f0df6e260e60205260405f2090565b9063ffffffff60e01b165f5260205260405f2090565b9063ffffffff1663ffffffff19825416179055565b611959565b6129ea565b63aad7bfbb60e01b5f5260045ffd5b505f5160206153d45f395f51905f525460581b6001600160581b0319166001600160581b0319851614612a22565b90916001600160f81b031982169160011a60f81b6001600160f81b03191680612b5957506006915b80612b1a575061158a926003615040565b600160f81b8103612b31575061158a926005615040565b6001600160f81b031903612b4a5761158a926004615040565b6339d2eb5560e01b5f5260045ffd5b600160f81b03612b6b57600791612b09565b636efbc08760e11b5f5260045ffd5b15612b8157565b631cd4b64760e21b5f5260045ffd5b9060149291815f823701906001600160601b03199060601b1681520190565b5f3560e01c63bc197c81811463f23a6e6182141763150b7a02821417612d045750612bdf61153261217636611976565b6001810180549192916001600160a01b0316151580612cbf575b612c0290612b7a565b8254612c189036906001600160a01b031661272e565b81549091906001600160f81b0319605882901b1680612c9257505054604051612c69916001600160a01b0316612c6482612c56333660208401612b90565b03601f198101845283611705565b613791565b155f036135515761022290612c8d612c7f6137b5565b94546001600160a01b031690565b612835565b9091506001600160f81b031990811603612b4a57612cba9036906001600160a01b031661376f565b612c69565b5082546001600160a01b0316151580612bf95750337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614612bf9565b6020526020603cf35b6001600160f81b03198082169260089290921b9081169190600160f91b83036122e6576001600160d81b03191690565b91959493925f5160206153d45f395f51905f525460581b925f14612ea6576002965b612d6883613b2b565b60405191808352828160010160051b016040525f5b818110612deb5750505095612ddd612de392612da461158a98996020815160051b91012090565b90606091604051917f633d6810f7f4053622dad4c187707d9c3cd7f57b8b68943473d3437060aefc6d8352602083015260408201522090565b90614fbe565b903090613bcf565b80612e9f612e91612dff6001948688611679565b803590612e256020820135612e1381610202565b878060a01b031660018060a01b031690565b612e4c612e3b612e41612e3b604086018661185e565b9061484d565b93606081019061185e565b929160a09391604051937f50c63c739a5f8d2e99954b3d4c7008fcdcef795a1b755ab9287372b01d6ac239855260208501526040840152606083015260808201522090565b6001830160051b8701528590565b5001612d7d565b600196612d5f565b612ef08160401c6001600160401b035f5160206153545f395f51905f525460a01c166001600160401b03612ee183611ad5565b54168111612f3f575b50611ad5565b6001600160401b03815416906001600160401b0382146112d05761022292612f386001600160401b0392600185016001600160401b03166001600160401b0319825416179055565b161461228c565b612f4c90610bae83611ad5565b5f612eea565b90612fa363ffffffff612f9b8193612a6f866001600160581b0319165f527fded5d420c407eac3c615e6abe13ab4a0bd7173e5045ea543765b46f0df6e260e60205260405f2090565b5416926113e5565b54161490565b91906001600160f81b0319831661302957505f5160206153d45f395f51905f525460581b9150816001600160581b03198116156130225750815b61300483612ff0816113e5565b5460201c6001600160a01b03161515611ed0565b6001600160f81b031916600160f91b0361301d57601690565b601590565b9150601490565b91612fe3565b5f5160206153d45f395f51905f525460581b6001600160581b0319908116908216146130725761305e906113e5565b8054640100000000600160c01b0319169055565b63670d240b60e11b5f5260045ffd5b92600461309561309d92856002969561450c565b921015611827565b018054680100000000000000008110156116ca576130c091600182018155611430565b81546001600160a01b0393841660039290921b91821b9390911b1916919091179055565b156130eb57565b6323a6725b60e01b5f5260045ffd5b9291905015613134575b506001600160a01b03165f9081525f5160206153b45f395f51905f5260205260409020805460ff19166001179055565b61313d906130e4565b5f613104565b90156114455790565b90600110156114455760010190565b356001600160601b0319811692919060148210613176575050565b6001600160601b031960149290920360031b82901b16169150565b1561319857565b6316141f7b60e11b5f5260045ffd5b90916001600160a01b038216156132d3578060041015611445576102229361325161323761323d613228613290956132156131f96131ec60048c013560ff60f81b1690565b6001600160f81b03191690565b966001600160f81b0319808916149081156132cb575b506130e4565b613222612176828b61194b565b98611984565b6001600160a01b03939161315b565b60601c90565b1694851515806132c0575b6132af57611b3e565b6001810180546001600160a01b0319166001600160a01b0390951694909417845592805460ff60a01b191660589290921c60ff60a01b16919091179055565b80546001600160a01b0319166001600160a01b03909216919091179055565b6115326132bb87614a8f565b613191565b506001861415613248565b90505f61320f565b63b236982b60e01b5f5260045ffd5b9091601481106133545760141161021357610222913560601c5b6001600160a01b038116908161332657505061329060015b6001600160a01b03908116921661144a565b61333f8260016132909414908115613344575b50613191565b613314565b61334e9150614a8f565b5f613339565b5061022291505f6132fc565b61339490613370610222956130e4565b61337c813b15156130e4565b60581b600160581b600160f81b0316600160f81b1790565b6145ab565b905f610222969594936105496133cf839460405192839160208301956306d61fe760e41b875260206024850181815201916118a7565b519082855af1936133de6118f3565b506150cd565b801561347a5765ffffffffffff8160a01c1690811560011461346c575b8060d01c8261341084836146a7565b156134625750657fffffffffff809116921643915b6001600160a01b0316159283613450575b508261344157505090565b65ffffffffffff161015919050565b65ffffffffffff16821192505f613436565b9092504291613425565b65ffffffffffff9150613401565b50600190565b909160041161021357610222913560081c63ffffffff60d81b16600160f91b179061062960026134af846113e5565b0154156123fe565b909160041161021357610222913560081c63ffffffff60d81b16600160f91b1790612414565b90600411610213576134f990356001600160e01b031916611b3e565b6001810180546001600160a81b031916905580546001600160a01b0319169055565b905f610222969594936105496133cf83946040519283916020830195638a91b0e360e01b875260206024850181815201916118a7565b3d5f803e3d5ffd5b6001600160401b0381116116ca5760051b60200190565b604080519091906135818382611705565b6001815291601f1901825f5b82811061359957505050565b80606060208093850101520161358d565b906135b482613559565b6135c16040519182611705565b82815280926135d2601f1991613559565b01905f5b8281106135e257505050565b8060606020809385010152016135d6565b90929181359182810194601f199101016020850194803593828560051b8301119060401c176136f757836136b0575b505061362d826135aa565b935f5b83811061363d5750505050565b600190613679613675600583901b85013585018035906020808201359161366f91369160408101350180359101611f0a565b916137a3565b1590565b6136a2575b6136866137b5565b613690828961184a565b5261369b818861184a565b5001613630565b6136ab84614fa1565b61367e565b835b5f190160208160051b8301013580830160608101908135809101918680602080860135809601011191111792171760401c176136f757806136b2575050505f80613622565b63ba597e7e5f526004601cfd5b60338211156136f7576137236137339236906033190160348401611f0a565b906014810135903560601c6137a3565b15613760575b50613742613570565b9061374b6137b5565b8251156114455760208301526128948261183d565b61376990614fa1565b5f613739565b5f916040518184823738925af490565b90915f928160405191823738925af490565b905f91815190836020389401915af190565b905f92918251916020389401915af190565b604051903d82523d5f602084013e60203d830101604052565b90923093306139cd575b60405190600119858201013560f01c94600e830196869187810384016041198101976119015f5260408960203789158a604201841017816042601e20181761398d57506d0a8f2e0cac888c2e8c2a6d2cedc560931b86526001198101999889818c82378188016028600e8201526029600d8201515f1a03613939575b506a07fffffe0000000000000160281b919250999899515f1a1c5b88515f1a602881146138905790651201000000016001921c1798019761386f565b5092949699908698604061158a9b83604c96989a957f20636f6e74656e74732c737472696e67206e616d652c737472696e670000000085527f2076657273696f6e2c6164647265737320766572696679696e67436f6e747261601c8601526f63742c627974657333322073616c742960801b603c8601528785013788370103018620835260c08320604052600116604201601e20926041199103019360405215611d45576146ca565b60015f5b016029600d82840301515f1a14848210111561395b5760019061393d565b6028915080806040600e936a07fffffe0000000000000160281b970397886041199101010185378a0101538291613854565b94969950509550505061158a94505f907f983e65e5148e570cd828ead231ee759a8d7958721a768f93bc4483ba005c32de5f5260205260405f2091611d0c565b93506139d7611930565b50939894509190506040519760208151910120604089015260208151910120606088015260018060a01b0316608087015260a086015260c085016040526137d8565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615613aa4575b6719010000000000005f52601a52603a526042601820905f603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220613a87565b610222906001600160401b038160401c91166001600160401b035f5160206153545f395f51905f525460a01c16916001600160401b03613b6a82611ad5565b5416831115613b7a57501461228c565b6001600160401b03919250613b8e90611ad5565b54161461228c565b90816020910312610213575161158a81610838565b61158a949260609260018060a01b03168252602082015281604082015201916118a7565b909392916001600160581b0319821615613cd657613bec826113e5565b8054909590613c0a9084906001600160a01b039060201c81166121e1565b6001600160f81b03198316600160f81b03613cb2576020949550613c4460405196879586948594637aa8f17760e11b865260048601613bab565b039160581c6001600160a01b03165afa9081156127be575f91613c83575b506001600160e01b031916630b135d3f60e11b03613c7e575f90565b600190565b613ca5915060203d602011613cab575b613c9d8183611705565b810190613b96565b5f613c62565b503d613c93565b9194929350916001600160f81b03198516600160f91b03613cd65761158a94614885565b5050505050600190565b80516001600160a01b0316825261158a9160208201516020820152610100613d61613d31613d1f60408601516101206040870152610120860190610bfd565b60608601518582036060870152610bfd565b6080850151608085015260a085015160a085015260c085015160c085015260e085015184820360e0860152610bfd565b92015190610100818403910152610bfd565b90816020910312610213575190565b15613d8957565b638baa579f60e01b5f5260045ffd5b60409061158a939281528160208201520190613ce0565b939291613dcc906040928652606060208701526060860190613ce0565b930152565b9392905f94613ddf816113e5565b94613dea84806117d0565b929050613e006002880193600185540114613d82565b63ffffffff60e01b9060081b16925f975b8354891015613ed2575f6020613e738b613e4f613e48613e3761150b6115f1858d611430565b92613e428d806117d0565b90611890565b3691611f0a565b6101008c01528a604051948580948193633894f6e760e11b83528d60048401613d98565b03926001600160a01b03165af180156127be57600192613e9a925f92613ea2575b5061430a565b980197613e11565b613ec491925060203d8111613ecb575b613ebc8183611705565b810190613d73565b905f613e94565b503d613eb2565b959197509291505f613f2761150b61150b6001613f459a613f13613e4860209b613f08613eff82806117d0565b919092806117d0565b90508a190191611890565b61010088015201546001600160a01b031690565b9260405197889586948593630ccab7a160e01b855260048501613daf565b03925af19081156127be5761158a925f92613f60575061430a565b613ec491925060203d602011613ecb57613ebc8183611705565b909280926014946001600160601b03199060601b1683528483013701015f815290565b613faa604082018261185e565b9091613fb961367583856149f8565b61402a57613fc9613fce916122a2565b614a15565b9160148211614006575050604051614000816105496020820194856014916001600160601b03199060601b1681520190565b51902090565b816140009261401492611995565b9190610549604051938492602084019687613f7a565b5050505f90565b61400081359261404084610202565b60208301359080156141035761054990935b614068614062606083018361185e565b90614e42565b90608081013560a08201359061409061408a60c08501359460e081019061185e565b90614e4d565b93604051988997602089019b8c949192610100969399989794919961012087019a7f29a0bca4af4be3421398da00295e58e6d7de38cb492214754cb6a47507dd6f8e885260018060a01b0316602088015260408701526060860152608085015260a084015260c083015260e08201520152565b50610549614114604085018561185e565b90816040519182372093614052565b9080601f8301121561021357815161158a926020016126b7565b519061022282610202565b9080601f8301121561021357815161415f81613559565b9261416d6040519485611705565b81845260208085019260051b82010192831161021357602001905b8282106141955750505090565b8151815260209182019101614188565b9060e0828203126102135781516001600160f81b031981168103610213579260208301516001600160401b03811161021357826141e3918501614123565b9260408101516001600160401b0381116102135783614203918301614123565b926060820151926142166080840161413d565b9260a08101519260c08201516001600160401b0381116102135761158a9201614148565b6040516342580cb760e11b81529291905f846004816001600160a01b0385165afa80156127be575f945f916142c7575b50604051947f91ab3d17e3a50a9d89e63fd30b92be7f5336b03b287bb946787a83a9d62a27665f52602081519101206020526020815191012060405260605260805f206020526119015f526040526042601e20916040525f606052565b90506142e69194503d805f833e6142de8183611705565b8101906141a5565b50505050949150935f61426a565b156142fb57565b63f763c15960e01b5f5260045ffd5b90811580156144ee575b6144ea576001600160a01b038181169083166001811480156144e0575b1561447557505060015b6143536143488460a01c90565b65ffffffffffff1690565b9261437461434861436d61434861436d6143488860a01c90565b9460d01c90565b9165ffffffffffff851615614467575b916143c665ffffffffffff836143dc95828096161561445f575b6001600160a01b0316975f1989016143ef575b81831681841611156143e857505b1660a01b90565b9381831683821610156143e157505b1660d01b90565b171790565b90506143d5565b90506143bf565b8288161580614454575b838616159081614448575b15908161443f575b50156143b15761443a61441f828a6146a7565b61443161442c85896146a7565b151590565b901515146142f4565b6143b1565b9050155f61440c565b83851685149150614404565b5082808216146143f9565b82915061439e565b65ffffffffffff9450614384565b801580806144d8575b1561448d575050505f5b61433b565b60018211806144d0575b156144a45750905061433b565b806144c6575b156144b5575061433b565b9081145f036144885750600161433b565b50600182116144aa565b508215614497565b50821561447e565b5060018214614331565b1790565b508015614314565b156144fd57565b633088924360e01b5f5260045ffd5b91614516906130e4565b600411610213573560081c63ffffffff60d81b16600160f91b179061453a826113e5565b916001600160581b03195f5c60581b16614579576145636001600160581b0319821615156144f6565b60581c6001600160581b0360a81b5f5c16175f5d565b610222906001600160581b03195f5c60581b81169116146144f6565b1561459c57565b630242859b60e61b5f5260045ffd5b91906145cc6145b9846113e5565b5460201c6001600160a01b031615614595565b8115614677578180826145f26132376145ec610222989761465d976119b2565b9061315b565b6001600160a01b038116801590614618908290811561466c575b81156133445750613191565b15614663575061465860015b61462d876113e5565b8054640100000000600160c01b03191660209290921b640100000000600160c01b0316919091179055565b611995565b916129a9565b61465890614624565b60018114915061460c565b50506125ea816114bc61468c610222946113e5565b8054640100000000600160c01b031916640100000000179055565b6580000000000016151590816146bb575090565b65800000000000915016151590565b90916146ea6131ec6146dc8386613143565b356001600160f81b03191690565b6146fa6131ec6146dc848761314c565b916001600160f81b031983166147dc578061472d916147275f5160206153d45f395f51905f525460581b90565b96611a1c565b9290925b600160fb1b8316156147c957506147639190614758906001600160f81b031916151561250a565b600160fa1b16151590565b9181359361478e613675610fb387602087019761478089896117d0565b90610fa560408b018b61185e565b6147c0576147ab6147b8946147a561158a97613b2b565b846117d0565b949093606081019061185e565b949093614b42565b50505050505f90565b92915050610fb39261158a943390613bcf565b6001600160f81b03198316600160f81b0361481a57808061480c61239a61150b6132376145ec614812978c6119ee565b966119ff565b929092614731565b6001600160f81b03198316600160f91b036125115780806148476115b66115a9612176614812968b6119c0565b966119d1565b8190604051376040512090565b909260809261158a9694835260018060a01b03166020830152604082015281606082015201916118a7565b94939092915f9361489683806117d0565b91905060028101976148ae8954936001850114613d82565b60081b6001600160e01b031916915f905b8082106149865750506001015495965061492b956020949392919061490b906148f29061150b906001600160a01b031681565b93614900613eff82806117d0565b5f1901929050611890565b60405163392dffaf60e01b8152988996879586959294926004870161485a565b03915afa80156127be5761158a925f91614967575b506001600160e01b031916630b135d3f60e11b0361495f575f9061430a565b60019061430a565b614980915060203d602011613cab57613c9d8183611705565b5f614940565b90966149d36020888888888f8e613e426149ac61150b61150b6115f1856149b397611430565b95806117d0565b60405163184dfdbb60e11b8152978896879586959294926004870161485a565b03915afa80156127be576001926149f0925f92613ea2575061430a565b9701906148bf565b90600211611ac257356001600160601b031916613b8160f11b1490565b60175f80833c5f51906110ff60f01b6001600160e81b0319831601614a48575060181b6001600160601b03191660601c90565b803b15614a6f57639f4e4cc960e01b5f9081526001600160a01b0391909116600452602490fd5b63e5819b9560e01b5f9081526001600160a01b0391909116600452602490fd5b6001600160a01b03165f9081525f5160206153b45f395f51905f52602052604090205460ff1690565b15614abf57565b63f387351f60e01b5f5260045ffd5b90816020910312610213575161158a8161043c565b94929093614b109261158a979560018060a01b0316875260208701526080604087015260808601916118a7565b9260608185039101526118a7565b5f1981146112d05760010190565b15614b3357565b631a0a9b9f60e21b5f5260045ffd5b90959493909290916001600160f81b03198116600160f81b03614c505760581c925f905b878210614c03575b614b918289614b9b93614b8c614bbc9b9c60209b9a99989710614b2c565b611679565b604081019061185e565b604051631ea7225f60e11b8152978896879586959294923360048801614ae3565b03916001600160a01b03165afa9081156127be575f91614bda575090565b61158a915060203d602011614bfc575b614bf48183611705565b810190614ace565b503d614bea565b90614c0f818984611679565b60018135149081614c2f575b50614c295760010190614b66565b90614b6e565b614c3c91506020016122a2565b6001600160a01b038681169116145f614c1b565b949594919350906001600160f81b03198116600160f91b036125115760081b614c85614c7c85806117d0565b90501515613d82565b5f945f5b818110614cac57505050505090614ca382613c7e936117d0565b9190501461248a565b614cb7818387611679565b614ce084614cce6115a9612176606086018661185e565b6001600160e01b031990811691161490565b80614e22575b614cf4575b50600101614c89565b86614d0c614d0582809b959b6117d0565b9050611922565b8314614d96575b614b9b6020918388614d3687613e426149ac61150b61150b8a614d439c016122a2565b949092604081019061185e565b03915afa9081156127be575f91614d78575b5015614d6d57614d66600191614b1e565b9690614ceb565b505050505050505f90565b614d90915060203d8111614bfc57614bf48183611705565b5f614d55565b50614da46006823514614ab8565b614db661150b61150b602084016122a2565b60405163ecd0596160e01b8152600660048201529190602090839060249082905afa9182156127be5788602092614dfb614d4395614b9b945f91614e05575b50614ab8565b9350915050614d13565b614e1c9150863d8111614bfc57614bf48183611705565b5f614df5565b50803560058114908115614e37575b50614ce6565b60069150145f614e31565b816040519182372090565b614e578282614ec9565b80614e685750816040519182372090565b604051920390600919820190833767117192d14ba1cb2b60c11b828201600919015260011901902090565b356001600160f01b0319811692919060028210614eae575050565b6001600160f01b031960029290920360031b82901b16169150565b603e8210614f6757614ee18260071981018184611a39565b6001600160c01b031991359182169160088210614f6d575b50506001600160c01b031916676e8e6d2eb45e34d560c11b01614f6757614f3b614f35614f2f84614f429481600a810391611a39565b90614e93565b60f01c90565b61ffff1690565b90603d1981018211614f52575090565b6307b9a19160e01b5f5260045260245260445ffd5b50505f90565b6001600160c01b031960089290920360031b82901b161690505f80614ef9565b634e487b7160e01b5f52605160045260245ffd5b9081600714614fba5750600603614f8d573d5f803e3d5ffd5b9050565b8060011461503657600203614f8d57614fd5612673565b604092919251927f91ab3d17e3a50a9d89e63fd30b92be7f5336b03b287bb946787a83a9d62a27665f5260208151910120602052602081519101206040523060605260805f206020526119015f526040526042601e20906040525f60605290565b5061158a90613a19565b929190928060041461506e578060051461506457600303614f8d5761158a92613704565b5061158a926135f3565b50909160138211156136f75761509191601319019060148101903560601c61377f565b156150be575b506150a0613570565b6150a86137b5565b8151156114455760208201528051156114455790565b6150c790614fa1565b5f615097565b939291909392836010146152115783600f146152065783600a146151fb5783600c146151f057836008146151e35783600e146151d85750826013146151cc57826012146151c05782600b146151915782600d146151845750508060091461513e57601103614f8d57610222906124ec565b506001600160a01b03165f9081527fc98f19fae81314cbf0302e1e3c0554f60c259fab8e2d5d392893489d40eb00456020526040902080546001600160a01b0319169055565b90915061022292506134dd565b5050506001600160a01b03165f9081525f5160206153b45f395f51905f5260205260409020805460ff19169055565b909150610222926134b7565b90915061022292613480565b925061022293613360565b50909150610222926132e2565b9250610222936131a7565b9250610222936130fa565b925061022293613081565b819350826152219295939561450c565b9083600411610213576152789360049161526c906001600160f91b63ffffffff60d81b883560081c1617950180546001600160a01b0319166001600160a01b03909216919091179055565b600319019201906145ab565b5f805c6001600160a81b031916905d565b90946014821461534857816015146152ac5750601603614f8d5761158a93613dd1565b5f9593929086958693506152c1913691611f0a565b61010084015261530660405180926152f26020830196639700320360e01b8852604060248501526064840190613ce0565b90604483015203601f198101835282611705565b519260581c6001600160a01b03165af161531e6118f3565b908061533d575b1561347a578060208061158a93518301019101613d73565b506020815114615325565b50505050505060019056fe9bc558e75ed0a57385e96d6b87fd2864d462eed29668be6fed742168fd90ab0fd21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef123341347516a9de374859dfda710fa4828b2d48cb57d4fbe4c1149612b8e02276e5419def70c6ad54339f14ca6da31808409bec8ff0f178491c5b59f0d8276d4d3ded5d420c407eac3c615e6abe13ab4a0bd7173e5045ea543765b46f0df6e260c0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032"
513
+ };
514
+ var kernelImmutableEcdsa = {
515
+ "transactionHash": "0xf0c962b62ff7d6314bf5523ea36cedc313f4c01bdb25e1799c7fe2c19b517fe4",
516
+ "deploymentInput": "0x0000000000000000000000000000000000000000000000000000000000000000610160604052346101af576156e56020813803918261001d816101b3565b9384928339810103126101af57516001600160a01b03811681036101af57306080524660a05260a061004f60406101b3565b6006815260208101906512d95c9b995b60d21b825261006e60406101b3565b91600583526020830191640302e342e360dc1b8352519020915190208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301526040820152466060820152306080820152206101005261012052306101405263409feecd1954600181166101a25760011c6002600160401b03190161015d575b6040516154f890816101ed823960805181613a2a015260a05181613a4d015260c05181613abd015260e05181613ae301526101005181613a09015261012051818181611e700152612cc40152610140518181816106de01526107ea0152f35b6002600160411b0363409feecd19556001600160401b0360209081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29080a16100fe565b63f92ee8a95f526004601cfd5b5f80fd5b6040519190601f01601f191682016001600160401b038111838210176101d857604052565b634e487b7160e01b5f52604160045260245ffdfe6080604052600436101561002e575b36156100245761001c612b9d565b602081519101f35b61002c611aef565b005b5f3560e01c8063112d3a7d146101fd5780631626ba7e146101f857806319822f7c146101f357806332b3a5dc146101ee57806349eadd18146101e95780634f1ef286146101e457806352d1902d146101df57806357b3a5f4146101da578063640890f4146101d5578063721e67f4146101d057806375c29cf6146101cb57806376babb15146101c65780637adc576e146101c15780637b103999146101bc57806384b0196e146101b75780638dd7712f146101b257806390ef8862146101ad5780639517e29f146101a85780639cfd7cff146101a3578063a706cd331461019e578063a71763a814610199578063ba103dff14610194578063d03c79141461018f578063d691c9641461018a578063d86f2b3c14610185578063e08c6ea214610180578063e9ae5c531461017b578063ebf0c717146101765763f2dc691d0361000e5761135b565b611325565b61130b565b6112c6565b61123b565b61116c565b61114e565b6110c3565b610fd5565b610f3b565b610eee565b610db3565b610d7e565b610cc7565b610c21565b610bc9565b610b55565b610b1b565b610a3b565b610945565b61092b565b61084a565b6107d7565b6106a3565b610446565b610388565b610320565b6102e5565b610290565b6001600160a01b0381160361021357565b5f80fd5b359061022282610202565b565b9181601f84011215610213578235916001600160401b038311610213576020838186019501011161021357565b6060600319820112610213576004359160243561026d81610202565b91604435906001600160401b0382116102135761028c91600401610224565b9091565b346102135760206102ac6102a336610251565b92919091611464565b6040519015158152f35b9060406003198301126102135760043591602435906001600160401b0382116102135761028c91600401610224565b346102135760206102fe6102f8366102b6565b91611b56565b6040516001600160e01b03199091168152f35b90816101209103126102135790565b6060366003190112610213576004356001600160401b0381116102135761034d6020913690600401610311565b60243590610367604435928392610362611e6d565b612019565b91610376575b50604051908152f35b3490349034903490335af1505f61036d565b6020366003190112610213576004356001600160401b03811690818103610213576103b1611e6d565b6103d75f5160206154585f395f51905f5254926001600160401b038460a01c161061226e565b67ffffffffffffffff60a01b1990911660a09190911b67ffffffffffffffff60a01b16175f5160206154585f395f51905f5255005b9181601f84011215610213578235916001600160401b038311610213576020808501948460051b01011161021357565b8015150361021357565b6060366003190112610213576004356001600160401b0381116102135761047190369060040161040c565b6024359061047e8261043c565b604435916001600160401b038311610213576104e16104a46104dc943690600401610224565b9490936104af611e6d565b6104ba81151561162a565b5f5160206154d85f395f51905f525460581b966104d782826122a4565b611640565b61235c565b6104e757005b6104f86104f3846113c7565b611718565b6001600160f81b03198416600160f81b0361056c5750604051638a91b0e360e01b6020820190815261002c9460581c6001600160a01b0316935f9384939161055791839161054991602484016118a9565b03601f1981018352826116e7565b519082855af1506105666118d5565b506124ce565b9291506001600160f81b03198216600160f91b03610694578061058e916117b2565b9092606081016105a96105a28251516117fb565b8414611809565b805151805b61062e575050925f806106299361060e826105496105ed604061002c9b01976105dd895160018060a01b031690565b956105e781611904565b91611872565b6040949194519283916020830196638a91b0e360e01b8852602484016118a9565b51925af15061061b6118d5565b50516001600160a01b031690565b612482565b61068b8561068661065e61065e5f808c610671826105496105ed8f8d908f61066b9051928619019a8b809461182c565b516001600160a01b031690565b96611872565b51925af15061067e6118d5565b50865161182c565b6123f6565b5f1901806105ae565b631b04366160e11b5f5260045ffd5b6040366003190112610213576004356106bb81610202565b6024356001600160401b038111610213576106da903690600401610224565b90917f000000000000000000000000000000000000000000000000000000000000000030146107ca5761070b611e6d565b60018060a01b03163d5f526352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc602060016004601d855afa51036107bc57807fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a281817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5561079f57005b815f926040519485378338925af4156107b457005b3d5f823e3d90fd5b6355299b496001526004601dfd5b639f03a0265f526004601cfd5b34610213575f36600319011261021357307f0000000000000000000000000000000000000000000000000000000000000000036107ca5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b6001600160e01b031981160361021357565b34610213576020366003190112610213576108fd61088b60043561086d81610838565b5f6040805161087b81611691565b8281528260208201520152611b20565b60016040519161089a83611691565b805460a083901b839003168084529101546001600160a01b0380821660208086019182526001600160f81b031960589490941b84166040968701908152865195841686529151909216918401919091525116918101919091529081906060820190565b0390f35b602060031982011261021357600435906001600160401b0382116102135761028c9160040161040c565b61002c61093736610901565b90610940611e6d565b6122a4565b3461021357602036600319011261021357602061098360043561096781610202565b5f604051610974816116b1565b526001600160a01b031661142c565b60405190610990826116b1565b546001600160a01b031690819052604051908152f35b600435906001600160581b03198216820361021357565b9060208252602060c0606060a085019363ffffffff8151168487015260018060a01b038482015116604087015260018060a01b03604082015116828701520151936080808201528451809452019201905f5b818110610a1c5750505090565b82516001600160a01b0316845260209384019390920191600101610a0f565b3461021357602036600319011261021357610a7c610a576109a6565b606080604051610a66816116cc565b5f81525f60208201525f604082015201526113c7565b600260405191610a8b836116cc565b805463ffffffff8116845260018060a01b039060201c16602084015260018060a01b03600182015416604084015201906040519182602082549182815201915f5260205f20905f5b818110610afc576108fd8587610aeb818803826116e7565b6060820152604051918291826109bd565b82546001600160a01b0316845260209093019260019283019201610ad3565b60203660031901126102135761002c610b326109a6565b610b3a611e6d565b612519565b600435906001600160c01b038216820361021357565b604036600319011261021357610b69610b3f565b6024356001600160401b0381168082036102135761002c92610ba9610bae92610b90611e6d565b6001600160401b03610ba184611ab7565b54161061226e565b611ab7565b906001600160401b03166001600160401b0319825416179055565b34610213575f366003190112610213575f5160206154585f395f51905f52546040516001600160a01b039091168152602090f35b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b34610213575f36600319011261021357610c71610c3c611912565b9496909293610c6360405198899860ff60f81b16895260e060208a015260e0890190610bfd565b908782036040890152610bfd565b92606086015260018060a01b0316608085015260a084015282810360c0840152602080835192838152019201905f5b818110610cae575050500390f35b8251845285945060209384019390920191600101610ca0565b6040366003190112610213576004356001600160401b03811161021357610cf2903690600401610311565b602435610cfd611e6d565b5c9060608101610d0d8183611840565b8060049392931161021357610d3492610d2e916003190190600401866127ba565b92611840565b80600411610213575f916004610d5884936040519384938492600319019101611a33565b0390305af491610d666118d5565b9215610d765761002c9250612823565b825160208401fd5b34610213575f3660031901126102135760206001600160401b035f5160206154585f395f51905f525460a01c16604051908152f35b610de2610dbf36610251565b50610dcb929192611e6d565b610dd58180611840565b9490916020810190611840565b909460018403610e2657905f5160206154785f395f51905f5295610e0b9392600e935b87613387565b604080519182526001600160a01b03929092166020820152a1005b60028403610e4b57905f5160206154785f395f51905f5295610e0b9392600893610e05565b60038403610e7057905f5160206154785f395f51905f5295610e0b9392600c93610e05565b60048403610e9557905f5160206154785f395f51905f5295610e0b9392600a93610e05565b60058403610eba57905f5160206154785f395f51905f5295610e0b9392600f93610e05565b919060068403610edf575f5160206154785f395f51905f5295610e0b93601093610e05565b63d623472560e01b5f5260045ffd5b34610213575f366003190112610213576108fd604051610f0f6040826116e7565b600b81526a1ad95c9b995b0b9d8c0b8d60aa1b6020820152604051918291602083526020830190610bfd565b608036600319011261021357600435610f538161043c565b602435906044356001600160401b03811161021357610f7690369060040161040c565b9190926064356001600160401b03811161021357610fad82610fb8948688610fa5610fb3963690600401610224565b949093612d2b565b91612e9c565b6133d2565b15610fc65761002c916122a4565b63f584bf1360e01b5f5260045ffd5b610fe1610dbf36610251565b90946001840361100a57905f5160206154985f395f51905f5295610e0b93926011935b87613509565b6002840361102f57905f5160206154985f395f51905f5295610e0b9392600993611004565b6003840361105457905f5160206154985f395f51905f5295610e0b9392600d93611004565b6004840361107957905f5160206154985f395f51905f5295610e0b9392600b93611004565b6005840361109e57905f5160206154985f395f51905f5295610e0b9392601293611004565b919060068403610edf575f5160206154985f395f51905f5295610e0b93601393611004565b6110cc36610901565b9063409feecd199081548060038455611122575b5081926110ec916122a4565b6110f257005b6002905560016020527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602080a1005b9091600182811c14303b1015611141576110ec9160ff1b1b91906110e0565b63f92ee8a95f526004601cfd5b346102135760203660031901126102135760206102ac600435611a40565b6111cf6111d561117b366102b6565b335f9081527fc98f19fae81314cbf0302e1e3c0554f60c259fab8e2d5d392893489d40eb004560205260409020546001600160a01b031694916111bf861515611e58565b6111c9368761271c565b93612acf565b92612823565b6040518091602082016020835281518091526040830190602060408260051b8601019301915f905b82821061120c57505050500390f35b9193600191939550602061122b8192603f198a82030186528851610bfd565b96019201920185949391926111fd565b3461021357602036600319011261021357611254610b3f565b6001600160401b0361126582611ab7565b5416906001600160401b035f5160206154585f395f51905f525460a01c168281116112b7575b506001600160401b039081199060401b16911681018091116112b257604051908152602090f35b6117e7565b91506001600160401b0361128b565b6040366003190112610213576112da6109a6565b602435906001600160401b038211610213576112fd61002c923690600401610224565b91611306611e6d565b612997565b61002c611317366102b6565b91611320611e6d565b612acf565b34610213575f3660031901126102135760205f5160206154d85f395f51905f525460581b604051906001600160581b0319168152f35b34610213576020366003190112610213576020600435600781109081611387575b506040519015158152f35b905015155f61137c565b356001600160e01b03198116929190600482106113ac575050565b6001600160e01b031960049290920360031b82901b16169150565b6001600160581b0319165f527fded5d420c407eac3c615e6abe13ab4a0bd7173e5045ea543765b46f0df6e260d60205260405f2090565b634e487b7160e01b5f52603260045260245ffd5b8054821015611427575f5260205f2001905f90565b6113fe565b6001600160a01b03165f9081527fc98f19fae81314cbf0302e1e3c0554f60c259fab8e2d5d392893489d40eb00456020526040902090565b90929190600181036114b957506001600160a01b03926114b392506114a3915060581b600160581b600160f81b0316600160f81b176113c7565b6113c7565b5460201c6001600160a01b031690565b16151590565b600281036114f957506001600160a01b03926114b392506114ed91506114e090841661142c565b546001600160a01b031690565b6001600160a01b031690565b60038103611538575061151961151461152793600193611391565b611b20565b01546001600160a01b031690565b6001600160a01b0390811691161490565b6004810361156f575050506001600160a01b03165f9081525f5160206154b85f395f51905f52602052604090205460ff1690565b90565b6005810361160b575061159861158b6115ae9361149e93611391565b6001600160e01b03191690565b60081c600160f91b1764ffffffffff60d81b1690565b600201805491905f5b8381106115c657505050505f90565b6115e86115d38284611412565b905460039190911b1c6001600160a01b031690565b6001600160a01b03848116911614611602576001016115b7565b50505050600190565b600603610edf5761151961149e61159861158b61152795600195611391565b1561163157565b63f92ee8a960e01b5f5260045ffd5b901561142757803590607e1981360301821215610213570190565b91908110156114275760051b81013590607e1981360301821215610213570190565b634e487b7160e01b5f52604160045260245ffd5b606081019081106001600160401b038211176116ac57604052565b61167d565b602081019081106001600160401b038211176116ac57604052565b608081019081106001600160401b038211176116ac57604052565b90601f801991011681019081106001600160401b038211176116ac57604052565b60405190610222610120836116e7565b90604051611725816116cc565b60028193805463ffffffff8116845260018060a01b039060201c16602084015260018060a01b036001820154166040840152019060405180928391602082549182815201915f5260205f20905f5b818110611790575050506060929161178c9103846116e7565b0152565b82546001600160a01b0316845286945060209093019260019283019201611773565b903590601e198136030182121561021357018035906001600160401b03821161021357602001918160051b3603831361021357565b634e487b7160e01b5f52601160045260245ffd5b90600182018092116112b257565b1561181057565b630dfe930960e41b5f5260045ffd5b8051156114275760200190565b80518210156114275760209160051b010190565b903590601e198136030182121561021357018035906001600160401b0382116102135760200191813603831361021357565b908210156114275761028c9160051b810190611840565b908060209392818452848401375f828201840152601f01601f1916010190565b91602061156c938181520191611889565b6001600160401b0381116116ac57601f01601f191660200190565b3d156118ff573d906118e6826118ba565b916118f460405193846116e7565b82523d5f602084013e565b606090565b5f198101919082116112b257565b600f60f81b90611920612661565b9091469030905f90606090565b906004116102135790600490565b909291928360041161021357831161021357600401916003190190565b600411610213575f90600490565b906019116102135760050190601490565b909291928360141161021357831161021357601401916013190190565b906014116102135790601490565b906006116102135760020190600490565b909291928360061161021357831161021357600601916005190190565b906016116102135760020190601490565b909291928360161161021357831161021357601601916015190190565b909291928360021161021357831161021357600201916001190190565b90939293848311610213578411610213578101920390565b908092918237015f815290565b6001600160f81b03198181169160011a60f81b168015908115611aa9575b5015611aa4578015908115611a96575b8115611a84575b5015611a8057600190565b5f90565b6001600160f81b03191490505f611a75565b600160f81b81149150611a6e565b505f90565b600160f81b1490505f611a5e565b6001600160c01b03165f9081527f9bc558e75ed0a57385e96d6b87fd2864d462eed29668be6fed742168fd90ab106020526040902090565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b63ffffffff60e01b165f527f550d18e77e0b3e646dcc27a9961c73d7867a7c5f6c2c65424629353cdc97dcc060205260405f2090565b9091928315611e39575b82848101601f19013561649261ffff30801c19040214611e24575b5083918094309430611dd5575b604051600119838301013560f01c95600e82019787918881038501986041198a016119015f526040816020378115826042018410178d6042601e201817611d93576d0a8f2e0cac888c2e8c2a6d2cedc560931b86529a9b508b9a6001198b019a828c8e378287016028600e8201526029600d8201515f1a03611d35575b50509b6a07fffffe0000000000000160281b909b9a9b515f1a1c5b8a515f1a60288114611c425760019b909b019a65120100000001901c17611c20565b50919293948181989b6040899c9f611cfb9c9f95605c967f20636f6e74656e74732c737472696e67206e616d652c737472696e670000000085527f2076657273696f6e2c75696e7432353620636861696e49642c61646472657373601c8601527f20766572696679696e67436f6e74726163742c627974657333322073616c7429603c8601528785013788370103018620835260e08320604052600116604201601e2092604119910301935b60405215611d27576146cd565b928315611d15575b505050155f03631626ba7e1760e01b90565b611d1f93506137bc565b5f8080611d03565b611d3090613a07565b6146cd565b839e919360015f5b01906029600d83850301515f1a149082101115611d5e578f90600190611d3d565b60289f6028916a07fffffe0000000000000160281b94935080604081600e940398896041199101010185378a0101539d611c05565b50509497505050611cfb9396508194975f907f983e65e5148e570cd828ead231ee759a8d7958721a768f93bc4483ba005c32de5f5260205260405f2091611cee565b9450611ddf611912565b509399945091604051996020815191012060408b01526020815191012060608a0152608089015260018060a01b031660a088015260c087015260e08601604052611b88565b6040810135018035945060200192505f611b7b565b61773961ffff851904028203611b6057637739000160e01b9350915050565b15611e5f57565b6282b42960e81b5f5260045ffd5b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316148015611ea9575b61022290611e58565b50333014611ea0565b15611eba5750565b633ac1612360e01b5f526001600160581b03191660045260245ffd5b15611edd57565b638e1817ff60e01b5f5260045ffd5b929192611ef8826118ba565b91611f0660405193846116e7565b829481845281830111610213578281602093845f960137010152565b9080601f830112156102135781602061156c93359101611eec565b9190916101208184031261021357611f53611708565b92611f5d82610217565b84526020820135602085015260408201356001600160401b0381116102135781611f88918401611f22565b604085015260608201356001600160401b0381116102135781611fac918401611f22565b60608501526080820135608085015260a082013560a085015260c082013560c085015260e08201356001600160401b0381116102135781611fee918401611f22565b60e08501526101008201356001600160401b038111610213576120119201611f22565b610100830152565b5f906120286020820135612cfb565b9291909461203a610100840184611840565b9690949085600160fb1b85166121d0575b509261209e9261209061156c9996938661206e6120d19a9860ff60f81b16151590565b6121ab575b6001600160f81b0319811615801561216a575b156120e157612f97565b949092600160fe1b16151590565b156120d757506120cb6120c26120bc6120b685613fa0565b85614034565b3361423d565b925b3690611f3d565b9261538a565b9061430d565b6120cb90926120c4565b612126606087016120fb6120f5828a611840565b9061192d565b638dd7712f60e01b916001600160e01b03199161211791611391565b1614908161213c575b50611ed6565b6121356114ed6114a3846113c7565b845d612f97565b612164915061215861215161215e928b611840565b809161193b565b90611391565b84612f40565b5f612120565b506121876121816121586120f560608a018a611840565b83612f40565b8015612086575060016001600160a01b036121a46114a3856113c7565b1614612086565b6121cb826001600160a01b036121c36114a3836113c7565b161515611eb2565b612073565b803598509096509094506020810161220388600160fa1b861615156121f584866117b2565b90610fa56040880188611840565b976001600160a01b038916600114612263579261209061225161156c9a9997946122476122416120d19b999661223b61209e9a612e9c565b836117b2565b906122a4565b6060810190611840565b9690969a50939692959750509261204b565b505050505050505090565b1561227557565b633ab3447f60e11b5f5260045ffd5b3561156c81610202565b1561229557565b63cb4492af60e01b5f5260045ffd5b905f5b81811061230f575050506001600160581b03196122d56122c85f5c60581b90565b6001600160581b03191690565b161580156122e7575b6102229061228e565b506102226001600160a01b0361230560016115195f5c60581b6113c7565b16151590506122de565b80612356612320600193858761165b565b803561234e60208301359261233484610202565b6123416040820182611840565b9290916060810190611840565b949093612898565b016122a7565b8035600181036123925750610b3a61237c6114ed60206102229401612284565b60581b600160f81b176001600160581b03191690565b600581149081156123d5575b5015610694578060606123b2920190611840565b60041161021357610222903560081c63ffffffff60d81b16600160f91b17612519565b60069150145f61239e565b156123e757565b63b9ac715d60e01b5f5260045ffd5b906124026002916113c7565b0180546124335f198201936124178585611412565b905460039190911b1c6001600160a01b039081169116146123e0565b15612458576124428282611412565b81549060018060a01b039060031b1b1916905555565b634e487b7160e01b5f52603160045260245ffd5b1561247357565b633026a01b60e21b5f5260045ffd5b90610222916124bb6001612495846113c7565b6124a36002820154156123e0565b01805490926001600160a01b0390811691161461246c565b80546001600160a01b031916905561301d565b6102229060581b600160581b600160f81b0316600160f81b1761301d565b156124f357565b6361c4e91b60e11b5f5260045ffd5b63ffffffff1663ffffffff81146112b25760010190565b6001600160581b03198116159081158092612659575b1561069457610222916001600160f81b03198216600160f81b148015612642575b8015612630575b612560906124ec565b612613575b5f5160206154d85f395f51905f525460581b6001600160581b031981161515806125fc575b6125c0575b5060581c6001600160581b0360a81b5f5160206154d85f395f51905f525416175f5160206154d85f395f51905f5255565b6125cc6125f6916113c7565b6125e26125dd825463ffffffff1690565b612502565b63ffffffff1663ffffffff19825416179055565b5f61258f565b506001600160581b0319808216908316141561258a565b61262b816001600160a01b036121c36114a3836113c7565b612565565b506001600160f81b0319821615612557565b506001600160f81b03198216600160f91b14612550565b50600161252f565b604090815161267083826116e7565b600681526512d95c9b995b60d21b602082015291612690815191826116e7565b60058152640302e342e360dc1b602082015290565b9291926126b1826118ba565b916126bf60405193846116e7565b829481845281830111610213578281602093845f96015e010152565b602081830312610213578051906001600160401b03821161021357019080601f8301121561021357815161156c926020016126a5565b6040513d5f823e3d90fd5b606092916001600160a01b03909116906001821415806127b1575b61273f575050565b60405163d68f602560e01b8152336004820152346024820152606060448201529293505f91839182908490829061277b90606483019084611889565b03925af19081156127ac575f91612790575090565b61156c91503d805f833e6127a481836116e7565b8101906126db565b612711565b50811515612737565b606093926001600160a01b039091169060018214158061281a575b6127de57505050565b60405163d68f602560e01b8152336004820152346024820152606060448201529394505f9284929183918591839161277b916064840191611889565b508115156127d5565b6001600160a01b031660018114158061288f575b61283f575050565b803b1561021357604051630b9dfbed60e11b815260206004820152915f918391829084908290612873906024830190610bfd565b03925af180156127ac57612885575b50565b5f610222916116e7565b50801515612837565b9394909392600184036128de57905f5160206154785f395f51905f52956128c39392600e9387613387565b604080519182526001600160a01b03929092166020820152a1565b6002840361290357905f5160206154785f395f51905f52956128c39392600893610e05565b6003840361292857905f5160206154785f395f51905f52956128c39392600c93610e05565b6004840361294d57905f5160206154785f395f51905f52956128c39392600a93610e05565b6005840361297257905f5160206154785f395f51905f52956128c39392600f93610e05565b919060068403610edf575f5160206154785f395f51905f52956128c393601093610e05565b906129a56003841615611809565b6129ae826113c7565b926129d86129c263ffffffff865416612502565b855463ffffffff191663ffffffff821617909555565b60048110156129e75750505050565b6129f4612158828461192d565b6001600160e01b03198116638dd7712f60e01b14801590612aa1575b15612a9257612a8d92612a8886612a738594612a5d896001600160581b0319165f527fded5d420c407eac3c615e6abe13ab4a0bd7173e5045ea543765b46f0df6e260e60205260405f2090565b9063ffffffff60e01b165f5260205260405f2090565b9063ffffffff1663ffffffff19825416179055565b61193b565b6129d8565b63aad7bfbb60e01b5f5260045ffd5b505f5160206154d85f395f51905f525460581b6001600160581b0319166001600160581b0319851614612a10565b90916001600160f81b031982169160011a60f81b6001600160f81b03191680612b4757506006915b80612b08575061156c926003615141565b600160f81b8103612b1f575061156c926005615141565b6001600160f81b031903612b385761156c926004615141565b6339d2eb5560e01b5f5260045ffd5b600160f81b03612b5957600791612af7565b636efbc08760e11b5f5260045ffd5b15612b6f57565b631cd4b64760e21b5f5260045ffd5b9060149291815f823701906001600160601b03199060601b1681520190565b5f3560e01c63bc197c81811463f23a6e6182141763150b7a02821417612cf25750612bcd61151461215836611958565b6001810180549192916001600160a01b0316151580612cad575b612bf090612b68565b8254612c069036906001600160a01b031661271c565b81549091906001600160f81b0319605882901b1680612c8057505054604051612c57916001600160a01b0316612c5282612c44333660208401612b7e565b03601f1981018452836116e7565b61377f565b155f0361353f5761022290612c7b612c6d6137a3565b94546001600160a01b031690565b612823565b9091506001600160f81b031990811603612b3857612ca89036906001600160a01b031661375d565b612c57565b5082546001600160a01b0316151580612be75750337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614612be7565b6020526020603cf35b6001600160f81b03198082169260089290921b9081169190600160f91b83036122c8576001600160d81b03191690565b91959493925f5160206154d85f395f51905f525460581b925f14612e94576002965b612d5683613b19565b60405191808352828160010160051b016040525f5b818110612dd95750505095612dcb612dd192612d9261156c98996020815160051b91012090565b90606091604051917f633d6810f7f4053622dad4c187707d9c3cd7f57b8b68943473d3437060aefc6d8352602083015260408201522090565b906150bf565b903090613bbd565b80612e8d612e7f612ded600194868861165b565b803590612e136020820135612e0181610202565b878060a01b031660018060a01b031690565b612e3a612e29612e2f612e296040860186611840565b90614850565b936060810190611840565b929160a09391604051937f50c63c739a5f8d2e99954b3d4c7008fcdcef795a1b755ab9287372b01d6ac239855260208501526040840152606083015260808201522090565b6001830160051b8701528590565b5001612d6b565b600196612d4d565b612ede8160401c6001600160401b035f5160206154585f395f51905f525460a01c166001600160401b03612ecf83611ab7565b54168111612f2d575b50611ab7565b6001600160401b03815416906001600160401b0382146112b25761022292612f266001600160401b0392600185016001600160401b03166001600160401b0319825416179055565b161461226e565b612f3a90610bae83611ab7565b5f612ed8565b90612f9163ffffffff612f898193612a5d866001600160581b0319165f527fded5d420c407eac3c615e6abe13ab4a0bd7173e5045ea543765b46f0df6e260e60205260405f2090565b5416926113c7565b54161490565b91906001600160f81b0319831661301757505f5160206154d85f395f51905f525460581b9150816001600160581b03198116156130105750815b612ff283612fde816113c7565b5460201c6001600160a01b03161515611eb2565b6001600160f81b031916600160f91b0361300b57601690565b601590565b9150601490565b91612fd1565b5f5160206154d85f395f51905f525460581b6001600160581b0319908116908216146130605761304c906113c7565b8054640100000000600160c01b0319169055565b63670d240b60e11b5f5260045ffd5b92600461308361308b92856002969561450f565b921015611809565b018054680100000000000000008110156116ac576130ae91600182018155611412565b81546001600160a01b0393841660039290921b91821b9390911b1916919091179055565b156130d957565b6323a6725b60e01b5f5260045ffd5b9291905015613122575b506001600160a01b03165f9081525f5160206154b85f395f51905f5260205260409020805460ff19166001179055565b61312b906130d2565b5f6130f2565b90156114275790565b90600110156114275760010190565b356001600160601b0319811692919060148210613164575050565b6001600160601b031960149290920360031b82901b16169150565b1561318657565b6316141f7b60e11b5f5260045ffd5b90916001600160a01b038216156132c1578060041015611427576102229361323f61322561322b61321661327e956132036131e76131da60048c013560ff60f81b1690565b6001600160f81b03191690565b966001600160f81b0319808916149081156132b9575b506130d2565b613210612158828b61192d565b98611966565b6001600160a01b039391613149565b60601c90565b1694851515806132ae575b61329d57611b20565b6001810180546001600160a01b0319166001600160a01b0390951694909417845592805460ff60a01b191660589290921c60ff60a01b16919091179055565b80546001600160a01b0319166001600160a01b03909216919091179055565b6115146132a987614b1a565b61317f565b506001861415613236565b90505f6131fd565b63b236982b60e01b5f5260045ffd5b9091601481106133425760141161021357610222913560601c5b6001600160a01b038116908161331457505061327e60015b6001600160a01b03908116921661142c565b61332d82600161327e9414908115613332575b5061317f565b613302565b61333c9150614b1a565b5f613327565b5061022291505f6132ea565b6133829061335e610222956130d2565b61336a813b15156130d2565b60581b600160581b600160f81b0316600160f81b1790565b6145ae565b905f610222969594936105496133bd839460405192839160208301956306d61fe760e41b87526020602485018181520191611889565b519082855af1936133cc6118d5565b506151ce565b80156134685765ffffffffffff8160a01c1690811560011461345a575b8060d01c826133fe84836146aa565b156134505750657fffffffffff809116921643915b6001600160a01b031615928361343e575b508261342f57505090565b65ffffffffffff161015919050565b65ffffffffffff16821192505f613424565b9092504291613413565b65ffffffffffff91506133ef565b50600190565b909160041161021357610222913560081c63ffffffff60d81b16600160f91b1790610629600261349d846113c7565b0154156123e0565b909160041161021357610222913560081c63ffffffff60d81b16600160f91b17906123f6565b90600411610213576134e790356001600160e01b031916611b20565b6001810180546001600160a81b031916905580546001600160a01b0319169055565b905f610222969594936105496133bd83946040519283916020830195638a91b0e360e01b87526020602485018181520191611889565b3d5f803e3d5ffd5b6001600160401b0381116116ac5760051b60200190565b6040805190919061356f83826116e7565b6001815291601f1901825f5b82811061358757505050565b80606060208093850101520161357b565b906135a282613547565b6135af60405191826116e7565b82815280926135c0601f1991613547565b01905f5b8281106135d057505050565b8060606020809385010152016135c4565b90929181359182810194601f199101016020850194803593828560051b8301119060401c176136e5578361369e575b505061361b82613598565b935f5b83811061362b5750505050565b600190613667613663600583901b85013585018035906020808201359161365d91369160408101350180359101611eec565b91613791565b1590565b613690575b6136746137a3565b61367e828961182c565b52613689818861182c565b500161361e565b613699846150a2565b61366c565b835b5f190160208160051b8301013580830160608101908135809101918680602080860135809601011191111792171760401c176136e557806136a0575050505f80613610565b63ba597e7e5f526004601cfd5b60338211156136e5576137116137219236906033190160348401611eec565b906014810135903560601c613791565b1561374e575b5061373061355e565b906137396137a3565b8251156114275760208301526128828261181f565b613757906150a2565b5f613727565b5f916040518184823738925af490565b90915f928160405191823738925af490565b905f91815190836020389401915af190565b905f92918251916020389401915af190565b604051903d82523d5f602084013e60203d830101604052565b90923093306139bb575b60405190600119858201013560f01c94600e830196869187810384016041198101976119015f5260408960203789158a604201841017816042601e20181761397b57506d0a8f2e0cac888c2e8c2a6d2cedc560931b86526001198101999889818c82378188016028600e8201526029600d8201515f1a03613927575b506a07fffffe0000000000000160281b919250999899515f1a1c5b88515f1a6028811461387e5790651201000000016001921c1798019761385d565b5092949699908698604061156c9b83604c96989a957f20636f6e74656e74732c737472696e67206e616d652c737472696e670000000085527f2076657273696f6e2c6164647265737320766572696679696e67436f6e747261601c8601526f63742c627974657333322073616c742960801b603c8601528785013788370103018620835260c08320604052600116604201601e20926041199103019360405215611d27576146cd565b60015f5b016029600d82840301515f1a1484821011156139495760019061392b565b6028915080806040600e936a07fffffe0000000000000160281b970397886041199101010185378a0101538291613842565b94969950509550505061156c94505f907f983e65e5148e570cd828ead231ee759a8d7958721a768f93bc4483ba005c32de5f5260205260405f2091611cee565b93506139c5611912565b50939894509190506040519760208151910120604089015260208151910120606088015260018060a01b0316608087015260a086015260c085016040526137c6565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615613a92575b6719010000000000005f52601a52603a526042601820905f603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220613a75565b610222906001600160401b038160401c91166001600160401b035f5160206154585f395f51905f525460a01c16916001600160401b03613b5882611ab7565b5416831115613b6857501461226e565b6001600160401b03919250613b7c90611ab7565b54161461226e565b90816020910312610213575161156c81610838565b61156c949260609260018060a01b0316825260208201528160408201520191611889565b909392916001600160581b0319821615613cce57613bda826113c7565b8054909590613bf89084906001600160a01b039060201c81166121c3565b6001600160f81b03198316600160f81b03613ca0576020949550613c3260405196879586948594637aa8f17760e11b865260048601613b99565b039160581c6001600160a01b03165afa9081156127ac575f91613c71575b506001600160e01b031916630b135d3f60e11b03613c6c575f90565b600190565b613c93915060203d602011613c99575b613c8b81836116e7565b810190613b84565b5f613c50565b503d613c81565b9194929350916001600160f81b03198516600160f91b03613cc45761156c94614910565b5050505050600190565b9050613cda935061487e565b15613c6c575f90565b80516001600160a01b0316825261156c9160208201516020820152610100613d64613d34613d2260408601516101206040870152610120860190610bfd565b60608601518582036060870152610bfd565b6080850151608085015260a085015160a085015260c085015160c085015260e085015184820360e0860152610bfd565b92015190610100818403910152610bfd565b90816020910312610213575190565b15613d8c57565b638baa579f60e01b5f5260045ffd5b60409061156c939281528160208201520190613ce3565b939291613dcf906040928652606060208701526060860190613ce3565b930152565b9392905f94613de2816113c7565b94613ded84806117b2565b929050613e036002880193600185540114613d85565b63ffffffff60e01b9060081b16925f975b8354891015613ed5575f6020613e768b613e52613e4b613e3a6114ed6115d3858d611412565b92613e458d806117b2565b90611872565b3691611eec565b6101008c01528a604051948580948193633894f6e760e11b83528d60048401613d9b565b03926001600160a01b03165af180156127ac57600192613e9d925f92613ea5575b5061430d565b980197613e14565b613ec791925060203d8111613ece575b613ebf81836116e7565b810190613d76565b905f613e97565b503d613eb5565b959197509291505f613f2a6114ed6114ed6001613f489a613f16613e4b60209b613f0b613f0282806117b2565b919092806117b2565b90508a190191611872565b61010088015201546001600160a01b031690565b9260405197889586948593630ccab7a160e01b855260048501613db2565b03925af19081156127ac5761156c925f92613f63575061430d565b613ec791925060203d602011613ece57613ebf81836116e7565b909280926014946001600160601b03199060601b1683528483013701015f815290565b613fad6040820182611840565b9091613fbc6136638385614a83565b61402d57613fcc613fd191612284565b614aa0565b9160148211614009575050604051614003816105496020820194856014916001600160601b03199060601b1681520190565b51902090565b816140039261401792611977565b9190610549604051938492602084019687613f7d565b5050505f90565b61400381359261404384610202565b60208301359080156141065761054990935b61406b6140656060830183611840565b90614f43565b90608081013560a08201359061409361408d60c08501359460e0810190611840565b90614f4e565b93604051988997602089019b8c949192610100969399989794919961012087019a7f29a0bca4af4be3421398da00295e58e6d7de38cb492214754cb6a47507dd6f8e885260018060a01b0316602088015260408701526060860152608085015260a084015260c083015260e08201520152565b506105496141176040850185611840565b90816040519182372093614055565b9080601f8301121561021357815161156c926020016126a5565b519061022282610202565b9080601f8301121561021357815161416281613547565b9261417060405194856116e7565b81845260208085019260051b82010192831161021357602001905b8282106141985750505090565b815181526020918201910161418b565b9060e0828203126102135781516001600160f81b031981168103610213579260208301516001600160401b03811161021357826141e6918501614126565b9260408101516001600160401b0381116102135783614206918301614126565b9260608201519261421960808401614140565b9260a08101519260c08201516001600160401b0381116102135761156c920161414b565b6040516342580cb760e11b81529291905f846004816001600160a01b0385165afa80156127ac575f945f916142ca575b50604051947f91ab3d17e3a50a9d89e63fd30b92be7f5336b03b287bb946787a83a9d62a27665f52602081519101206020526020815191012060405260605260805f206020526119015f526040526042601e20916040525f606052565b90506142e99194503d805f833e6142e181836116e7565b8101906141a8565b50505050949150935f61426d565b156142fe57565b63f763c15960e01b5f5260045ffd5b90811580156144f1575b6144ed576001600160a01b038181169083166001811480156144e3575b1561447857505060015b61435661434b8460a01c90565b65ffffffffffff1690565b9261437761434b61437061434b61437061434b8860a01c90565b9460d01c90565b9165ffffffffffff85161561446a575b916143c965ffffffffffff836143df958280961615614462575b6001600160a01b0316975f1989016143f2575b81831681841611156143eb57505b1660a01b90565b9381831683821610156143e457505b1660d01b90565b171790565b90506143d8565b90506143c2565b8288161580614457575b83861615908161444b575b159081614442575b50156143b45761443d614422828a6146aa565b61443461442f85896146aa565b151590565b901515146142f7565b6143b4565b9050155f61440f565b83851685149150614407565b5082808216146143fc565b8291506143a1565b65ffffffffffff9450614387565b801580806144db575b15614490575050505f5b61433e565b60018211806144d3575b156144a75750905061433e565b806144c9575b156144b8575061433e565b9081145f0361448b5750600161433e565b50600182116144ad565b50821561449a565b508215614481565b5060018214614334565b1790565b508015614317565b1561450057565b633088924360e01b5f5260045ffd5b91614519906130d2565b600411610213573560081c63ffffffff60d81b16600160f91b179061453d826113c7565b916001600160581b03195f5c60581b1661457c576145666001600160581b0319821615156144f9565b60581c6001600160581b0360a81b5f5c16175f5d565b610222906001600160581b03195f5c60581b81169116146144f9565b1561459f57565b630242859b60e61b5f5260045ffd5b91906145cf6145bc846113c7565b5460201c6001600160a01b031615614598565b811561467a578180826145f56132256145ef610222989761466097611994565b90613149565b6001600160a01b03811680159061461b908290811561466f575b8115613332575061317f565b15614666575061465b60015b614630876113c7565b8054640100000000600160c01b03191660209290921b640100000000600160c01b0316919091179055565b611977565b91612997565b61465b90614627565b60018114915061460f565b50506125cc8161149e61468f610222946113c7565b8054640100000000600160c01b031916640100000000179055565b6580000000000016151590816146be575090565b65800000000000915016151590565b90916146ed6131da6146df8386613131565b356001600160f81b03191690565b6146fd6131da6146df848761313a565b916001600160f81b031983166147df57806147309161472a5f5160206154d85f395f51905f525460581b90565b966119fe565b9290925b600160fb1b8316156147cc5750614766919061475b906001600160f81b03191615156124ec565b600160fa1b16151590565b91813593614791613663610fb387602087019761478389896117b2565b90610fa560408b018b611840565b6147c3576147ae6147bb946147a861156c97613b19565b846117b2565b9490936060810190611840565b949093614bcd565b50505050505f90565b92915050610fb39261156c943390613bbd565b6001600160f81b03198316600160f81b0361481d57808061480f61237c6114ed6132256145ef614815978c6119d0565b966119e1565b929092614734565b6001600160f81b03198316600160f91b036124f357808061484a61159861158b612158614815968b6119a2565b966119b3565b8190604051376040512090565b9060208251920151916001600160601b031983169260148210613164575050565b91611527916148bb6114ed613225604051604060146034601d84303c8083015160ff16156148c1575b80835282015f60208201520160405261485d565b93614ecd565b303b90603d603c198301928360281c3d3d3e820301828211029003901515026148a7565b909260809261156c9694835260018060a01b0316602083015260408201528160608201520191611889565b94939092915f9361492183806117b2565b91905060028101976149398954936001850114613d85565b60081b6001600160e01b031916915f905b808210614a11575050600101549596506149b695602094939291906149969061497d906114ed906001600160a01b031681565b9361498b613f0282806117b2565b5f1901929050611872565b60405163392dffaf60e01b815298899687958695929492600487016148e5565b03915afa80156127ac5761156c925f916149f2575b506001600160e01b031916630b135d3f60e11b036149ea575f9061430d565b60019061430d565b614a0b915060203d602011613c9957613c8b81836116e7565b5f6149cb565b9096614a5e6020888888888f8e613e45614a376114ed6114ed6115d385614a3e97611412565b95806117b2565b60405163184dfdbb60e11b815297889687958695929492600487016148e5565b03915afa80156127ac57600192614a7b925f92613ea5575061430d565b97019061494a565b90600211611aa457356001600160601b031916613b8160f11b1490565b60175f80833c5f51906110ff60f01b6001600160e81b0319831601614ad3575060181b6001600160601b03191660601c90565b803b15614afa57639f4e4cc960e01b5f9081526001600160a01b0391909116600452602490fd5b63e5819b9560e01b5f9081526001600160a01b0391909116600452602490fd5b6001600160a01b03165f9081525f5160206154b85f395f51905f52602052604090205460ff1690565b15614b4a57565b63f387351f60e01b5f5260045ffd5b90816020910312610213575161156c8161043c565b94929093614b9b9261156c979560018060a01b031687526020870152608060408701526080860191611889565b926060818503910152611889565b5f1981146112b25760010190565b15614bbe57565b631a0a9b9f60e21b5f5260045ffd5b90959493909290916001600160f81b03198116600160f81b03614cdb5760581c925f905b878210614c8e575b614c1c8289614c2693614c17614c479b9c60209b9a99989710614bb7565b61165b565b6040810190611840565b604051631ea7225f60e11b8152978896879586959294923360048801614b6e565b03916001600160a01b03165afa9081156127ac575f91614c65575090565b61156c915060203d602011614c87575b614c7f81836116e7565b810190614b59565b503d614c75565b90614c9a81898461165b565b60018135149081614cba575b50614cb45760010190614bf1565b90614bf9565b614cc79150602001612284565b6001600160a01b038681169116145f614ca6565b949594919350906001600160f81b03198116600160f91b036124f35760081b614d10614d0785806117b2565b90501515613d85565b5f945f5b818110614d3757505050505090614d2e82613c6c936117b2565b9190501461246c565b614d4281838761165b565b614d6b84614d5961158b6121586060860186611840565b6001600160e01b031990811691161490565b80614ead575b614d7f575b50600101614d14565b86614d97614d9082809b959b6117b2565b9050611904565b8314614e21575b614c266020918388614dc187613e45614a376114ed6114ed8a614dce9c01612284565b9490926040810190611840565b03915afa9081156127ac575f91614e03575b5015614df857614df1600191614ba9565b9690614d76565b505050505050505f90565b614e1b915060203d8111614c8757614c7f81836116e7565b5f614de0565b50614e2f6006823514614b43565b614e416114ed6114ed60208401612284565b60405163ecd0596160e01b8152600660048201529190602090839060249082905afa9182156127ac5788602092614e86614dce95614c26945f91614e90575b50614b43565b9350915050614d9e565b614ea79150863d8111614c8757614c7f81836116e7565b5f614e80565b50803560058114908115614ec2575b50614d71565b60069150145f614ebc565b604080515f95949093918114614f1857604114614ee957505050565b604080929395508101355f1a60205281375b5f526020604060805f60015afa505f6060523d6060185191604052565b5060208082013560ff81901c601b0190915290356040526001600160ff1b0316606052909250614efb565b816040519182372090565b614f588282614fca565b80614f695750816040519182372090565b604051920390600919820190833767117192d14ba1cb2b60c11b828201600919015260011901902090565b356001600160f01b0319811692919060028210614faf575050565b6001600160f01b031960029290920360031b82901b16169150565b603e821061506857614fe28260071981018184611a1b565b6001600160c01b03199135918216916008821061506e575b50506001600160c01b031916676e8e6d2eb45e34d560c11b016150685761503c615036615030846150439481600a810391611a1b565b90614f94565b60f01c90565b61ffff1690565b90603d1981018211615053575090565b6307b9a19160e01b5f5260045260245260445ffd5b50505f90565b6001600160c01b031960089290920360031b82901b161690505f80614ffa565b634e487b7160e01b5f52605160045260245ffd5b90816007146150bb575060060361508e573d5f803e3d5ffd5b9050565b806001146151375760020361508e576150d6612661565b604092919251927f91ab3d17e3a50a9d89e63fd30b92be7f5336b03b287bb946787a83a9d62a27665f5260208151910120602052602081519101206040523060605260805f206020526119015f526040526042601e20906040525f60605290565b5061156c90613a07565b929190928060041461516f57806005146151655760030361508e5761156c926136f2565b5061156c926135e1565b50909160138211156136e55761519291601319019060148101903560601c61376d565b156151bf575b506151a161355e565b6151a96137a3565b8151156114275760208201528051156114275790565b6151c8906150a2565b5f615198565b939291909392836010146153125783600f146153075783600a146152fc5783600c146152f157836008146152e45783600e146152d95750826013146152cd57826012146152c15782600b146152925782600d146152855750508060091461523f5760110361508e57610222906124ce565b506001600160a01b03165f9081527fc98f19fae81314cbf0302e1e3c0554f60c259fab8e2d5d392893489d40eb00456020526040902080546001600160a01b0319169055565b90915061022292506134cb565b5050506001600160a01b03165f9081525f5160206154b85f395f51905f5260205260409020805460ff19169055565b909150610222926134a5565b9091506102229261346e565b92506102229361334e565b50909150610222926132d0565b925061022293613195565b9250610222936130e8565b92506102229361306f565b819350826153229295939561450f565b9083600411610213576153799360049161536d906001600160f91b63ffffffff60d81b883560081c1617950180546001600160a01b0319166001600160a01b03909216919091179055565b600319019201906145ae565b5f805c6001600160a81b031916905d565b90946014821461544957816015146153ad575060160361508e5761156c93613dd4565b5f9593929086958693506153c2913691611eec565b61010084015261540760405180926153f36020830196639700320360e01b8852604060248501526064840190613ce3565b90604483015203601f1981018352826116e7565b519260581c6001600160a01b03165af161541f6118d5565b908061543e575b15613468578060208061156c93518301019101613d76565b506020815114615426565b93925050613cda935061487e56fe9bc558e75ed0a57385e96d6b87fd2864d462eed29668be6fed742168fd90ab0fd21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef123341347516a9de374859dfda710fa4828b2d48cb57d4fbe4c1149612b8e02276e5419def70c6ad54339f14ca6da31808409bec8ff0f178491c5b59f0d8276d4d3ded5d420c407eac3c615e6abe13ab4a0bd7173e5045ea543765b46f0df6e260c0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032"
517
+ };
518
+ var kernelFactory = {
519
+ "transactionHash": "0x804d74773e4761dea2c4984b0874e9594ec2d6da37c679897ac2ba4f502d7e7e",
520
+ "deploymentInput": "0x000000000000000000000000000000000000000000000000000000000000000060c0346100d457601f610aa838819003918201601f19168301916001600160401b038311848410176100d85780849260409485528339810103126100d45780516001600160a01b038116918282036100d45760200151916001600160a01b038316908184036100d4573b151590816100c9575b50156100ba5760805260a0526040516109bb90816100ed82396080518181816103c10152818161044201526104cc015260a05181818160f4015281816101f9015261037c0152f35b632e07c4bd60e11b5f5260045ffd5b90503b15155f610072565b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f5f3560e01c80630609747b146104855780630e027ecd146103f05780631fe6734d146103ab57806390d939ae14610366578063ab03a058146101635763dde411f21461005c575f80fd5b3461016057610079602091610070366106a9565b9194929461087b565b604051926bffffffffffffffffffffffff199060601b1684840152601483526100a36034846106f1565b60405183519261ffc284113d3d3e805b84811061014c575061013a94505f51602061099b5f395f51905f5260408301525f51602061097b5f395f51905f528683015261600960165260018060a01b037f0000000000000000000000000000000000000000000000000000000000000000166014528360381b6961003d3d8160233d397301905260165181526060309301902061095c565b6040516001600160a01b039091168152f35b8581018701518382016060015286016100b3565b80fd5b5061016d366106a9565b6001600160a01b038416156103575761018790828461087b565b6040519360208501906bffffffffffffffffffffffff199060601b168152601485526101b46034866106f1565b606086916040519651809181848a019160045afa505f51602061099b5f395f51905f5260408801525f51602061097b5f395f51905f52602088015261600960169081527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166014526afe61003d3d8160233d3973603883901b0161ffc283115251875260ff885301918286206035523060601b600152806015526055872092341596843b1561033d5750505050600193610338578438818034855af11561032b575b60358590526001600160a01b0316921561029e575b602083604051908152f35b8390833b1561031c5760405163ba103dff60e01b815292839182916102c7919060048401610779565b038183865af1801561032057610307575b50807f716e3b33ce803ae4643ae4e40cab1394f7fd0f0d8a0209af74b333c1a8bbf0d083602094a25f80610293565b6103128380926106f1565b61031c575f6102d8565b5080fd5b6040513d85823e3d90fd5b63b12d13eb85526004601cfd5b61027e565b91935091955034f58061027e57633011642585526004601cfd5b632057875960e21b8552600485fd5b50346101605780600319360112610160576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346101605780600319360112610160576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346101605761013a60209161040e61040836610676565b9161087b565b604051915f51602061099b5f395f51905f526060525f51602061097b5f395f51905f52604052616009855260018060a01b037f000000000000000000000000000000000000000000000000000000000000000016601e5268603d3d8160223d3973600a52605f60212092604052606052309161095c565b5061049e61049236610676565b8183959394929461087b565b604080515f51602061099b5f395f51905f526060525f51602061097b5f395f51905f529091526160096020527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316601e5268603d3d8160223d3973600a52605f60212060358201523060581b8152939092905f60ff86538460158701526055862090341595823b15610629575050600194610624575f38818034855af115610617575b60408690525f6060526001600160a01b0316931561056d575b602084604051908152f35b833b15610613578461058f5f93829363ba103dff60e01b845260048401610779565b038183865af19081156106085760209383926105d3575b50807f716e3b33ce803ae4643ae4e40cab1394f7fd0f0d8a0209af74b333c1a8bbf0d091a25f8080610562565b6105e092505f91506106f1565b805f7f716e3b33ce803ae4643ae4e40cab1394f7fd0f0d8a0209af74b333c1a8bbf0d06105a6565b6040513d5f823e3d90fd5b5f80fd5b63b12d13eb5f526004601cfd5b610549565b91509450605f602134f5806105495763301164255f526004601cfd5b9181601f840112156106135782359167ffffffffffffffff8311610613576020808501948460051b01011161061357565b6040600319820112610613576004359067ffffffffffffffff8211610613576106a191600401610645565b909160243590565b906060600319830112610613576004356001600160a01b038116810361061357916024359067ffffffffffffffff8211610613576106e991600401610645565b909160443590565b90601f8019910116810190811067ffffffffffffffff82111761071357604052565b634e487b7160e01b5f52604160045260245ffd5b9035601e198236030181121561061357016020813591019167ffffffffffffffff821161061357813603831361061357565b908060209392818452848401375f828201840152601f01601f1916010190565b9180602084016020855252604083019060408160051b85010193835f91607e1982360301905b8484106107b0575050505050505090565b90919293949596603f19828203018752873583811215610613578401803582526020810135916001600160a01b0383168303610613576108396020928392600195868060a01b03168482015261082b61082061080f6040850185610727565b608060408601526080850191610759565b926060810190610727565b916060818503910152610759565b9901970195940192919061079f565b903590601e1981360301821215610613570180359067ffffffffffffffff82116106135760200191813603831361061357565b9060405193600182018552846002830160051b016040526020850193845260015b855181101561094e575f1981018381101561093a5760051b840135607e19853603018112156106135784019060208201359160018060a01b03831680930361061357600192816108f160406080940182610848565b809391604051376040519283209061090c6060840184610848565b9490859137604051938420923584526020840152604083015260608201522081830160051b8801520161089c565b634e487b7160e01b5f52603260045260245ffd5b50939150505160051b902090565b91909160ff5f5360355260601b60015260155260555f20905f60355256fe5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f30000000000000000000000003c504000d05c1e28687f70fca40a76f7ddda9952000000000000000000000000c40a98103fb6e7b30ec32a2585a7d43b90f0c82f"
521
+ };
522
+ var p256Validator = {
523
+ "repository": "https://github.com/leekt/P256Validator",
524
+ "commit": "8f6a71992e297f2e7caa61df2c6eb0b6d9145d2d",
525
+ "source": "src/P256Validator.sol",
526
+ "moduleType": 1,
527
+ "compiler": {
528
+ "solc": "0.8.26+commit.8a97fa7a",
529
+ "viaIR": false,
530
+ "optimizer": true,
531
+ "optimizerRuns": 200,
532
+ "evmVersion": "cancun",
533
+ "configuredEvmVersion": "osaka",
534
+ "bytecodeHash": "ipfs"
535
+ },
536
+ "dependencies": {
537
+ "@openzeppelin-contracts": "5.3.0",
538
+ "forge-std": "0844d7e1fc5e60d77b68e469bff60265f236c398"
539
+ },
540
+ "precompile": "0x0000000000000000000000000000000000000100",
541
+ "expectedAddress": "0x9906ab44ff795883c5a725687a2705be4118b0f3",
542
+ "runtimeCodeHash": "0xd7d9a5b1ddd1e22e7235268fd624c7c0714e5046b199d507bbfe5e03408e579d",
543
+ "deploymentInput": "0x0000000000000000000000000000000000000000000000000000000000000000608060405234801561000f575f80fd5b507fbb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023600560015f80516020610a3d8339815191525f80516020610a1d83398151915261005e8585858585610085565b61007b57604051631dfef61360e01b815260040160405180910390fd5b5050505050610291565b5f808061009588888888886100d1565b9150915080156100a7575090506100c8565b6040516321580de760e11b8152610100600482015260240160405180910390fd5b95945050505050565b5f806100dd8686610186565b15806100f057506100ee84846101ed565b155b1561010057505f9050600161017c565b61010d8787878787610251565b1561011d5750600190508061017c565b6101667fbb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023600560015f80516020610a3d8339815191525f80516020610a1d833981519152610251565b1561017657505f9050600161017c565b505f9050805b9550959350505050565b5f82158015906101af57506f4319055258e8617b0c46353d039cdaae63ffffffff60c01b011983105b80156101ba57508115155b80156101e657507f7fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a88211155b9392505050565b5f600160601b63ffffffff60c01b031980838409817f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b8387856003600160601b0363ffffffff60c01b0319878b8c0908090894821191909310169190921416919050565b5f6040518681528560208201528460408201528360608201528260808201525f805260205f60a0836101005afa61028457fe5b50505f5195945050505050565b61077f8061029e5f395ff3fe608060405260043610610054575f3560e01c80636d61fe7014610058578063888ade0a1461006d5780638a91b0e3146100b957806397003203146100cc578063ecd05961146100ed578063f551e2ee1461011d575b5f80fd5b61006b6100663660046105bf565b610155565b005b348015610078575f80fd5b5061009f610087366004610619565b5f602081905290815260409020805460019091015482565b604080519283526020830191909152015b60405180910390f35b61006b6100c73660046105bf565b610220565b6100df6100da366004610632565b610261565b6040519081526020016100b0565b3480156100f8575f80fd5b5061010d610107366004610679565b60011490565b60405190151581526020016100b0565b348015610128575f80fd5b5061013c610137366004610690565b6102c8565b6040516001600160e01b031990911681526020016100b0565b335f90815260208190526040902080541515806101755750600181015415155b1561019a576040516393360fbf60e01b81523360048201526024015b60405180910390fd5b5f806101a8848601866106e6565b90925090506101b78282610331565b6101d45760405163145a1fdd60e31b815260040160405180910390fd5b81835560018301819055604080518381526020810183905233917f3098a4d0b734b305aa037c22af80fa8f3b94c1e6e86467b5e0026b2440b54146910160405180910390a25050505050565b335f81815260208190526040808220828155600101829055517fc5a9b8041ef11732e7dd7043167d8c22db5c7ea99dcd38dce401effacf8a29bf9190a25050565b5f8080610272610100860186610706565b81019061027f91906106e6565b335f90815260208190526040902080546001820154939550919350916102aa918791869186916103aa565b156102ba575f93505050506102c2565b600193505050505b92915050565b5f80806102d7848601866106e6565b335f9081526020819052604090208054600182015493955091935091610302918991869186916103aa565b1561031a5750630b135d3f60e11b9250610329915050565b506001600160e01b0319925050505b949350505050565b5f6ffffffffeffffffffffffffffffffffff60601b1980838409817f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b8387857fffffffff00000001000000000000000000000000fffffffffffffffffffffffc878b8c0908090894821191909310169190921416919050565b5f805f6103ba88888888886103f2565b9150915080156103cc575090506103e9565b6040516321580de760e11b81526101006004820152602401610191565b95945050505050565b5f806103fe86866104cd565b1580610411575061040f8484610331565b155b1561042157505f905060016104c3565b61042e878787878761053a565b1561043e575060019050806104c3565b6104ad7fbb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023600560017fa71af64de5126a4a4e02b7922d66ce9415ce88a4c9d25514d91082c8725ac9577f5d47723c8fbe580bb369fec9c2665d8e30a435b9932645482e7c9f11e872296b61053a565b156104bd57505f905060016104c3565b505f9050805b9550959350505050565b5f82158015906104fc57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255183105b801561050757508115155b801561053357507f7fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a88211155b9392505050565b5f6040518681528560208201528460408201528360608201528260808201525f805260205f60a0836101005afa61056d57fe5b50505f5195945050505050565b5f8083601f84011261058a575f80fd5b50813567ffffffffffffffff8111156105a1575f80fd5b6020830191508360208285010111156105b8575f80fd5b9250929050565b5f80602083850312156105d0575f80fd5b823567ffffffffffffffff8111156105e6575f80fd5b6105f28582860161057a565b90969095509350505050565b80356001600160a01b0381168114610614575f80fd5b919050565b5f60208284031215610629575f80fd5b610533826105fe565b5f8060408385031215610643575f80fd5b823567ffffffffffffffff811115610659575f80fd5b8301610120818603121561066b575f80fd5b946020939093013593505050565b5f60208284031215610689575f80fd5b5035919050565b5f805f80606085870312156106a3575f80fd5b6106ac856105fe565b935060208501359250604085013567ffffffffffffffff8111156106ce575f80fd5b6106da8782880161057a565b95989497509550505050565b5f80604083850312156106f7575f80fd5b50508035926020909101359150565b5f808335601e1984360301811261071b575f80fd5b83018035915067ffffffffffffffff821115610735575f80fd5b6020019150368190038213156105b8575f80fdfea264697066735822122055208b8b00c2ccb02464be1ca8a3605bf5fd4dcd177807910ea9e0559177525a64736f6c634300081a00335d47723c8fbe580bb369fec9c2665d8e30a435b9932645482e7c9f11e872296ba71af64de5126a4a4e02b7922d66ce9415ce88a4c9d25514d91082c8725ac957",
544
+ "note": "Recompiling this source at this commit with this profile reproduces the creation code of the module's own Ethereum Sepolia deployment byte for byte, so expectedAddress and runtimeCodeHash both derive offline from deploymentInput alone. Two profile facts are load-bearing because they enter the contract metadata and therefore the address: the foundry profile configures evm_version osaka, which solc 0.8.26 does not know and compiles as cancun, and forge-std must resolve at lib/forge-std so its remapping appears in the metadata settings.",
545
+ "deploymentEvidence": {
546
+ "chainId": 11155111,
547
+ "transactionHash": "0xcc3381af97315ffae6ac17477f5cf0f8cc7e905f114fc2d545b5d6e9543094ca",
548
+ "blockNumber": "10455641",
549
+ "deployer": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
550
+ "salt": "0x0000000000000000000000000000000000000000000000000000000000000000",
551
+ "evidenceCommit": "4be442538977b6b81453656d2f8f4938431d7d65",
552
+ "matchesPinnedModule": true,
553
+ "note": "The module's own broadcast record carries this exact deploymentInput and a status-1 receipt at this address. The constructor probes the P-256 precompile and reverts when it is absent, so the receipt is also evidence that Ethereum Sepolia carried EIP-7951 at this block. Read from the repository's committed broadcast record; no live RPC call was made."
554
+ }
555
+ };
556
+ var ecdsaSigner = {
557
+ "repository": "https://github.com/zerodevapp/kernel-7579-plugins",
558
+ "source": "src/ECDSASigner.sol",
559
+ "moduleType": 6,
560
+ "compiler": {
561
+ "solc": "0.8.24+commit.e11b9ed9",
562
+ "viaIR": true,
563
+ "optimizer": true,
564
+ "optimizerRuns": 200,
565
+ "evmVersion": "paris",
566
+ "bytecodeHash": "none",
567
+ "cborMetadata": false
568
+ },
569
+ "expectedAddress": "0x6a6f069e2a08c2468e7724ab3250cdbfba14d4ff",
570
+ "runtimeCodeHash": "0x510a0a1ab8b3f256a5c90b5fff51a9fd98656bd1c8a29fbd7857faa70c400ccd",
571
+ "deploymentInput": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657610649908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b6000803560e01c80630ccab7a114610327578063244d6cb2146102f0578063392dffaf1461028f5780636d61fe70146101bc5780638a3646e3146101795780638a91b0e3146100d6578063d60b347f146100995763ecd059611461007757600080fd5b3461009657602036600319011261009657506006602092519135148152f35b80fd5b5082346100d25760203660031901126100d25760209181906001600160a01b036100c1610374565b168152808452205415159051908152f35b5080fd5b5091826020806003193601126100d257833567ffffffffffffffff81116101755761010490369086016103a5565b82116101755735808352600182528383203384528252838320546001600160a01b03161561017557825260018152828220338352815282822080546001600160a01b0319169055528220805490918115610162575060001901905580f35b634e487b7160e01b845260119052602483fd5b8280fd5b509190346101755781600319360112610175578160209361019861038f565b92358152600185528181206001600160a01b03938416825285522054915191168152f35b50916020908160031936011261028b57823567ffffffffffffffff811161026c576101ea90369085016103a5565b808495929511610287578435808752600185528387203388528552838720549092906001600160a01b03166102835786855283872080549091600019821461027057506001019055601f190160141161026c578452600182528084203385528252832091013560601c6bffffffffffffffffffffffff60a01b82541617905580f35b8480fd5b634e487b7160e01b895260119052602488fd5b8680fd5b8580fd5b8380fd5b50829034610096576080366003190112610096576102ab61038f565b506064359067ffffffffffffffff821161009657506020926102d36102de92369083016103a5565b916044359035610506565b90516001600160e01b03199091168152f35b5082346100d25760203660031901126100d25760209181906001600160a01b03610318610374565b16815280845220549051908152f35b50600319929190606036850112610096576024359367ffffffffffffffff85116100d257610120908536030112610096575060209261036d91604435918101903561043c565b9051908152f35b600435906001600160a01b038216820361038a57565b600080fd5b602435906001600160a01b038216820361038a57565b9181601f8401121561038a5782359167ffffffffffffffff831161038a576020838186019501011161038a57565b92919267ffffffffffffffff918281116104265760405192601f8201601f19908116603f01168401908111848210176104265760405282948184528183011161038a578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b91600092835260016020526040832033845260205260018060a01b0390816040852054169261010081013590601e1981360301821215610287570180359067ffffffffffffffff82116102875760200191813603831361028757836104ab6104a53685876103d3565b836105ab565b1685146104fe576104ef926104e9916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916103d3565b906105ab565b16036104f85790565b50600190565b505050505090565b92919092600052600160205260406000203360005260205260018060a01b03918260406000205416938361053e6104a53685876103d3565b16851461059a5761057d926104e9916020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c6004209236916103d3565b160361058e57630b135d3f60e11b90565b6001600160e01b031990565b50630b135d3f60e11b949350505050565b919091602060016080600082948390604080998151986105e9575b5050505afa51923d156105db57600060605252565b638baa579f6000526004601cfd5b8492835287808201518352828251146106295760418251146106125750505090503888816105c6565b60609384830151901a9052015190523888816105c6565b9250015190601b8260ff1c019052848060ff1b03166060523888816105c656",
572
+ "note": "Exact zero-salt CREATE2 payload extracted from the verified Arbitrum Sepolia deployment transaction; Blockscout verification reproduces both creation and runtime bytecode.",
573
+ "deploymentEvidence": {
574
+ "chainId": 421614,
575
+ "transactionHash": "0x8e282ec093d21f0a7f27a9e8d8bbfd90d092106d2fc1f104e74e4541c457a197",
576
+ "blockNumber": "32627805",
577
+ "deployer": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
578
+ "salt": "0x0000000000000000000000000000000000000000000000000000000000000000",
579
+ "creationAccount": "0x2a5f59d7c9338c47acb962ad191d5ce47db118e8",
580
+ "initCodeHash": "0x5c757305090179fd55d99ade637da3ff267acfc8fcded63e39433c3466660559"
581
+ }
582
+ };
583
+ var webAuthnSigner = {
584
+ "repository": "https://github.com/zerodevapp/kernel-7579-plugins",
585
+ "commit": "332deed6eeef3d6279cde50aa1d51eff53728bd4",
586
+ "source": "src/signers/WebAuthnSigner.sol",
587
+ "moduleType": 6,
588
+ "compiler": {
589
+ "solc": "0.8.30+commit.73712a01",
590
+ "viaIR": true,
591
+ "optimizer": true,
592
+ "optimizerRuns": 2e4,
593
+ "evmVersion": "prague"
594
+ },
595
+ "expectedAddress": "0x8b2df925aa16071fcdf0053768420e242935ac65",
596
+ "deploymentInput": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234601557611310908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80630ccab7a11461060d5780631811663f14610594578063244d6cb214610532578063392dffaf146104505780636d61fe70146102605780638a91b0e314610117578063d60b347f146100b35763ecd0596114610071575f80fd5b346100af5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100af5760206040516006600435148152f35b5f80fd5b346100af5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100af5773ffffffffffffffffffffffffffffffffffffffff6100ff610708565b165f525f602052602060405f20541515604051908152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100af5760043567ffffffffffffffff81116100af5761016190369060040161072b565b6020116100af5735805f52600160205260405f2073ffffffffffffffffffffffffffffffffffffffff33165f5260205260405f205415610234575f52600160205260405f2073ffffffffffffffffffffffffffffffffffffffff33165f526020525f6001604082208281550155335f525f60205260405f2080548015610207577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019055005b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7ff91bd6f1000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100af5760043567ffffffffffffffff81116100af576102aa90369060040161072b565b806020116100af57813590815f52600160205260405f2073ffffffffffffffffffffffffffffffffffffffff33165f5260205260405f205461042457335f525f60205260405f20908154907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214610207577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0926001869301905581010301606081126100af576040136100af5760405161036481610759565b6040602084013593848352013560208201938185521590811561041b575b506103f3576001915f528160205260405f2073ffffffffffffffffffffffffffffffffffffffff33165f5260205260405f2090519283825551918291015560405191825260208201527fac9eef70e30b05ba935b5092b39f4fe85762ee3a8853386ea1e9a224986976ef60403392a2005b7fa2d0fee8000000000000000000000000000000000000000000000000000000005f5260045ffd5b90501584610382565b7f93360fbf000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b346100af5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100af576104876106e5565b5060643567ffffffffffffffff81116100af576104ab6104b891369060040161072b565b9060443533600435610853565b61050a5760207f1626ba7e000000000000000000000000000000000000000000000000000000005b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b60207fffffffff000000000000000000000000000000000000000000000000000000006104e0565b346100af5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100af5773ffffffffffffffffffffffffffffffffffffffff61057e610708565b165f525f602052602060405f2054604051908152f35b346100af5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100af576105cb6106e5565b6004355f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f2091165f526020526040805f206001815491015482519182526020820152f35b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100af5760243567ffffffffffffffff81116100af57803603906101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126100af577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd61010482013592018212156100af570160048101359067ffffffffffffffff82116100af5760240181360381136100af576020916106dd9160443533600435610853565b604051908152f35b6024359073ffffffffffffffffffffffffffffffffffffffff821682036100af57565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100af57565b9181601f840112156100af5782359167ffffffffffffffff83116100af57602083818601950101116100af57565b6040810190811067ffffffffffffffff82111761077557604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761077557604052565b67ffffffffffffffff811161077557601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b929192610829826107e3565b9161083760405193846107a2565b8294818452818301116100af578281602093845f960137010152565b9392919092820160c0838203126100af57823567ffffffffffffffff81116100af57830181601f820112156100af57818160206108929335910161081d565b90602084013567ffffffffffffffff81116100af5784019080601f830112156100af578160206108c49335910161081d565b9260a08101359485151586036100af57610953965f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f2091165f5260205260405f209260016040519461091386610759565b8054865201549360208101948552604051916020830152602082526109396040836107a2565b51935194608083013593604060608501359401359261099e565b61095c57600190565b5f90565b908151811015610971570160200190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b909796959493929197600198815160258110908115610e56575b50610e4e575b604092610a01858386516109d288826107a2565b601581527f2274797065223a22776562617574686e2e6765742200000000000000000000006020820152610f6a565b15610e46575b610a1090611131565b5f8151600281119081610dc6575b5015610d2b575060025b81519081039081116102075780610a3f84926107e3565b90610a4c875192836107a2565b808252610a58816107e3565b937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840195013686375f5b828110610c1a5750505090610b2a92610b256001602d6017958a519485917f226368616c6c656e6765223a220000000000000000000000000000000000000060208401525180918484015e81017f22000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18101845201826107a2565b610f6a565b15610c12575b5f602080928551918183925191829101835e8101838152039060025afa15610c08575f6020918151610b818480875180948280830197805191829101895e82019083820152030180845201826107a2565b8451918291518091835e8101838152039060025afa15610bff57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f519114610bf05790610bd39594939291611010565b9081610be8575b50610be3575f90565b600190565b90505f610bda565b610bfa9650611010565b505f90565b513d5f823e3d90fd5b50513d5f823e3d90fd5b5f9950610b30565b81929394507f2b000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000610c6d83600195610960565b511603610c8d57602d610c808287610960565b535b019085939291610a85565b7f2f000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000610cd98386610960565b511603610cf257605f610cec8287610960565b53610c82565b7fff00000000000000000000000000000000000000000000000000000000000000610d1d8285610960565b51165f1a610cec8287610960565b8151600181119081610d46575b5015610a2857506001610a28565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810191508111610207577fff00000000000000000000000000000000000000000000000000000000000000610dbd7f3d000000000000000000000000000000000000000000000000000000000000009285610960565b5116145f610d38565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe810191508111610207577fff00000000000000000000000000000000000000000000000000000000000000610e3d7f3d000000000000000000000000000000000000000000000000000000000000009285610960565b5116145f610a1e565b5f9a50610a07565b5f99506109be565b90506020101561097157610e9160017fff00000000000000000000000000000000000000000000000000000000000000604085015116610e98565b155f6109b8565b907f010000000000000000000000000000000000000000000000000000000000000080831603610f575780610f2b575b610bfa577f080000000000000000000000000000000000000000000000000000000000000080821603610efc575b50600190565b7f10000000000000000000000000000000000000000000000000000000000000008091161461095c575f610ef6565b507f04000000000000000000000000000000000000000000000000000000000000008082161415610ec8565b50505f90565b9190820180921161020757565b919082519281515f5b858110610f8557505050505050600190565b81610f908287610f5d565b1015611006577fff00000000000000000000000000000000000000000000000000000000000000610fc18285610960565b51167fff00000000000000000000000000000000000000000000000000000000000000610ff7610ff18489610f5d565b87610960565b51160361100657600101610f73565b5050505050505f90565b94939291907f7fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a882116110065761104595611077565b90565b3d15611072573d90611059826107e3565b9161106760405193846107a2565b82523d5f602084013e565b606090565b92935f959192948695604051946020860196875260408601526060850152608084015260a083015260a082526110ae60c0836107a2565b83146110f45751906101005afa6110c3611048565b901580156110eb575b610bfa57602081519181808201938492010103126100af575160011490565b508051156110cc565b519073c2b78104907f722dabac4c69f826a522b2754de45afa50611116611048565b602081519181808201938492010103126100af575160011490565b908151156112c4578151600281018091116102075760039004908160021b917f3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81160361020757604051917f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f603f52602083018480518101602081018051915f82525b80891061128857506020959697509060039291525106806001146112365760021461120a575b50808452830101604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff603d9101535f6111fe565b507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81603d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8194015301535f6111fe565b939760036004910198603f8a51818160121c165183538181600c1c16516001840153818160061c165160028401531651600382015301936111d8565b90506040516112d46020826107a2565b5f81529056fea2646970667358221220915809d473a74fc5863d5a57153ea0ff456ac49e9fcc595746d261d914a1a8ab64736f6c634300081e0033",
597
+ "runtimeCodeHash": "0xb725f54a7cf2367e9ea39da15c3984dd30786699f21d4bf8f767c2e80b273d18"
598
+ };
599
+ var p256Verifier = {
600
+ "repository": "https://github.com/daimo-eth/p256-verifier",
601
+ "commit": "607d3ec8377a3f59d65eca60d87dee8485d2ebcc",
602
+ "source": "src/P256Verifier.sol",
603
+ "note": "Not an ERC-7579 module: the audited Daimo P-256 verifier singleton the pinned WebAuthnSigner staticcalls at this fixed address when usePrecompiled is false. The deployment input is the exact mainnet broadcast calldata (zero salt + initcode) through the same deterministic CREATE2 proxy, so the address is chain-independent.",
604
+ "expectedAddress": "0xc2b78104907f722dabac4c69f826a522b2754de4",
605
+ "deploymentInput": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657610dd1908161001c8239f35b600080fdfe60e06040523461001a57610012366100c7565b602081519101f35b600080fd5b6040810190811067ffffffffffffffff82111761003b57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff82111761003b57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761003b57604052565b60a08103610193578060201161001a57600060409180831161018f578060601161018f578060801161018f5760a01161018c57815182810181811067ffffffffffffffff82111761015f579061013291845260603581526080356020820152833560203584356101ab565b15610156575060ff6001915b5191166020820152602081526101538161001f565b90565b60ff909161013e565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b80fd5b5080fd5b5060405160006020820152602081526101538161001f565b909283158015610393575b801561038b575b8015610361575b6103585780519060206101dc818301938451906103bd565b1561034d57604051948186019082825282604088015282606088015260808701527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60a08701527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551958660c082015260c081526102588161006a565b600080928192519060055afa903d15610345573d9167ffffffffffffffff831161031857604051926102b1857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160185610086565b83523d828585013e5b156102eb57828280518101031261018c5750015190516102e693929185908181890994099151906104eb565b061490565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526001600452fd5b6024827f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b6060916102ba565b505050505050600090565b50505050600090565b507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518310156101c4565b5082156101bd565b507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518410156101b6565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff90818110801590610466575b8015610455575b61044d577f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b8282818080957fffffffff00000001000000000000000000000000fffffffffffffffffffffffc0991818180090908089180091490565b505050600090565b50801580156103f1575082156103f1565b50818310156103ea565b7f800000000000000000000000000000000000000000000000000000000000000081146104bc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b909192608052600091600160a05260a05193600092811580610718575b61034d57610516838261073d565b95909460ff60c05260005b600060c05112156106ef575b60a05181036106a1575050507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5957f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2969594939291965b600060c05112156105c7575050505050507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff91506105c260a051610ca2565b900990565b956105d9929394959660a05191610a98565b9097929181928960a0528192819a6105f66080518960c051610722565b61060160c051610470565b60c0528061061b5750505050505b96959493929196610583565b969b5061067b96939550919350916001810361068857507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5937f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693610952565b979297919060a05261060f565b6002036106985786938a93610952565b88938893610952565b600281036106ba57505050829581959493929196610583565b9197917ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0161060f575095508495849661060f565b506106ff6080518560c051610722565b8061070b60c051610470565b60c052156105215761052d565b5060805115610508565b91906002600192841c831b16921c1681018091116104bc5790565b8015806107ab575b6107635761075f91610756916107b3565b92919091610c42565b9091565b50507f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296907f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f590565b508115610745565b919082158061094a575b1561080f57507f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29691507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5906001908190565b7fb01cbd1c01e58065711814b583f061e9d431cca994cea1313449bf97c840ae0a917fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808481600186090894817f94e82e0c1ed3bdb90743191a9c5bbf0d88fc827fd214cc5f0b5ec6ba27673d6981600184090893841561091b575050808084800993840994818460010994828088600109957f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29609918784038481116104bc5784908180867fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0991818580090808978885038581116104bc578580949281930994080908935b93929190565b9350935050921560001461093b5761093291610b6d565b91939092610915565b50506000806000926000610915565b5080156107bd565b91949592939095811580610a90575b15610991575050831580610989575b61097a5793929190565b50600093508392508291508190565b508215610970565b85919294951580610a88575b610a78577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff968703918783116104bc5787838189850908938689038981116104bc5789908184840908928315610a5d575050818880959493928180848196099b8c9485099b8c920999099609918784038481116104bc5784908180867fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0991818580090808978885038581116104bc578580949281930994080908929190565b965096505050509093501560001461093b5761093291610b6d565b9550509150915091906001908190565b50851561099d565b508015610961565b939092821580610b65575b61097a577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff908185600209948280878009809709948380888a0998818080808680097fffffffff00000001000000000000000000000000fffffffffffffffffffffffc099280096003090884808a7fffffffff00000001000000000000000000000000fffffffffffffffffffffffd09818380090898898603918683116104bc57888703908782116104bc578780969481809681950994089009089609930990565b508015610aa3565b919091801580610c3a575b610c2d577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff90818460020991808084800980940991817fffffffff00000001000000000000000000000000fffffffffffffffffffffffc81808088860994800960030908958280837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd09818980090896878403918483116104bc57858503928584116104bc5785809492819309940890090892565b5060009150819081908190565b508215610b78565b909392821580610c9a575b610c8d57610c5a90610ca2565b9182917fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80809581940980099009930990565b5050509050600090600090565b508015610c4d565b604051906020918281019183835283604083015283606083015260808201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60a08201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60c082015260c08152610d1a8161006a565b600080928192519060055afa903d15610d93573d9167ffffffffffffffff83116103185760405192610d73857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160185610086565b83523d828585013e5b156102eb57828280518101031261018c5750015190565b606091610d7c56fea2646970667358221220fa55558b04ced380e93d0a46be01bb895ff30f015c50c516e898c341cd0a230264736f6c63430008150033",
606
+ "runtimeCodeHash": "0x3cd725b6ba67b40b7979190c41a015e82cf21e098eb61832ba623f8538bab7fc"
607
+ };
608
+ var callPolicy = {
609
+ "repository": "https://github.com/cartesi/erc-4337-devnet",
610
+ "commit": "2d86aeea200a52919304b535454850182b80e563",
611
+ "source": "zerodev/kernel-call-policy/0.0.4/src/CallPolicy.sol",
612
+ "package": "zerodev-kernel-call-policy@0.0.4",
613
+ "moduleType": 5,
614
+ "compiler": {
615
+ "solc": "0.8.24+commit.e11b9ed9",
616
+ "viaIR": true,
617
+ "optimizer": true,
618
+ "optimizerRuns": 200,
619
+ "evmVersion": "paris",
620
+ "bytecodeHash": "none",
621
+ "cborMetadata": false
622
+ },
623
+ "expectedAddress": "0x9a52283276a0ec8740df50bf01b28a80d880eaf2",
624
+ "packageExpectedAddress": "0x9a52283276A0ec8740DF50bF01B28A80D880eaf2",
625
+ "runtimeCodeHash": "0x99fc4b02bdbb9a5133728a2bfffb458bf8530b1b068d6d4334f69dcb454ace78",
626
+ "note": "Recompiling this source with this profile and the mirrored Kernel v3 dependency sources reproduces the package's own cannon expected address, so the pinned address is ZeroDev's.",
627
+ "relatedVerifiedDeployment": {
628
+ "package": "zerodev-kernel-call-policy@0.0.1",
629
+ "chainId": 42161,
630
+ "address": "0xe4fec84b7b002273ecc86baa65a831ddb92d30a8",
631
+ "runtimeCodeHash": "0x5d6f60d6bb71d6a9e1514c62417a5ab5eaa6e363cad29ba35d6d97c0f6c3492c",
632
+ "matchesPinnedModule": false,
633
+ "note": "One manual eth_getCode on 2026-08-04 read 4620 bytes of live code there; the pinned 0.0.4 runtime is 6539 bytes. 0.0.1 predates the explicit no-matching-permission revert, the ONE_OF condition, multi-parameter rules and the empty-calldata selector derivation a plain value transfer needs. Tests never read this address."
634
+ },
635
+ "deploymentInput": "0x0000000000000000000000000000000000000000000000000000000000000000608080604052346100165761198b908161001c8239f35b600080fdfe6080604052600436101561001257600080fd5b6000803560e01c908163244d6cb2146100aa57508063309bfb76146100a55780636d61fe70146100a05780637129edce1461009b5780638a91b0e314610096578063d60b347f14610091578063d8ed2b3c1461008c578063ecd05961146100875763ffbb39f81461008257600080fd5b6107d3565b6107b3565b610755565b6106f6565b610670565b61046f565b6101d7565b61012b565b346100e55760203660031901126100e5576040906004356100ca816100e8565b6001600160a01b031681526020818152919020546080908152f35b80fd5b6001600160a01b038116036100f957565b600080fd5b9181601f840112156100f9578235916001600160401b0383116100f957602083818601950101116100f957565b346100f95760803660031901126100f9576101476024356100e8565b6064356001600160401b0381116100f9576101669036906004016100fe565b5050600435600090815260016020908152604080832033845290915290205460ff1660038110156101a4576001036100f95760405160008152602090f35b610735565b60206003198201126100f957600435906001600160401b0382116100f9576101d3916004016100fe565b9091565b6101e0366101a9565b906020916020116100f95790610248602083359361023a61022b610224610211886000526001602052604060002090565b3360009081526020919091526040902090565b5460ff1690565b6102348161074b565b15610849565b018035019060208201913590565b90916000925b8284106102b2576102956102888661027133916000526001602052604060002090565b9060018060a01b0316600052602052604060002090565b805460ff19166001179055565b3360009081526020819052604090206102ae8154610d08565b9055005b6102c56102c0858584610a7f565b610aa1565b6102da836102d4878786610a7f565b01610996565b946040916102f3836102ed848988610a7f565b01610ab6565b83516001600160f81b031990921686830190815260609890981b6001600160601b03191660018901526001600160e01b03191660158801529586601982010396610345601f19988981018352826109d9565b5190209661035e610357338a84610a19565b5115610acb565b6000975b61036d838887610a7f565b61037c60809182810190610b17565b90508a101561040a576001998a91899088878460066103ba6103b5836103af6103a6878b8a610a7f565b89810190610b17565b9061096f565b610b60565b6103c381610b56565b036103d6575b5050505050019850610362565b6103af87946103ef6103a694610400986103f897610a7f565b90810190610b17565b905014610b6a565b88388887846103c9565b50600194985061045f610467939492988a61045361044561043b898d6060610433838389610a7f565b013595610a7f565b6080810190610b17565b9096519687938c8501610c01565b039081018452836109d9565b339088611930565b01929361024e565b604060031981813601126100f95760049081356024356001600160401b0381116100f9576101208185019382360301126100f957606461051d91016104e36104c06104ba83876108cf565b90610850565b63e9ae5c5360e01b916001600160e01b0319916104dc91610901565b1614610849565b6105146105026104fc6104f684886108cf565b9061085e565b906108b2565b90818060081b918160301b9160501b90565b505050936108cf565b506024810135019183602484019301359060ff60f81b809116801560001461057e5750509061055261055c9261056094611908565b92909193336115d4565b1590565b61057057505b5160008152602090f35b905163016754b960e61b8152fd5b600160f81b8103610619575050509061059e908035019060208201913590565b60009291925b8181106105b5575050505050610566565b6105fd61055c6105ce6105c984868961096f565b610996565b6105e56105dc85878a61096f565b8a8101906108cf565b9060206105f387898c61096f565b013592883361127e565b610609576001016105a4565b855163016754b960e61b81528590fd5b03610660579161055c9161064d848061064761064161063b610656998861086f565b9061092d565b60601c90565b9461087d565b92909133610ec1565b6105705750610566565b84516339d2eb5560e01b81528490fd5b610679366101a9565b6020116100f95735600081815260016020908152604080832033845290915281205490919060ff1660038110156101a4576001036106f2578152600160209081526040808320336000908152908352818120805460ff19166002179055918290529020805480156106ed5760001901905580f35b610cf2565b5080fd5b346100f95760203660031901126100f957600435610713816100e8565b60018060a01b0316600052600060205260206040600020541515604051908152f35b634e487b7160e01b600052602160045260246000fd5b600311156101a457565b346100f95760403660031901126100f95760ff61079e602435610777816100e8565b600435600052600160205260406000209060018060a01b0316600052602052604060002090565b541660405160038210156101a4576020918152f35b346100f95760203660031901126100f95760206040516005600435148152f35b346100f95760603660031901126100f9576107fe6044356107f3816100e8565b602435600435610a19565b6040805190602080835283519182602085015260005b8381106108365784604081866000838284010152601f80199101168101030190f35b8581018301518582018301528201610814565b156100f957565b906004116100f95790600490565b906024116100f95760040190602090565b906014116100f95790601490565b90929192836014116100f95783116100f957601401916013190190565b909392938483116100f95784116100f9578101920390565b3590602081106108c0575090565b6000199060200360031b1b1690565b903590601e19813603018212156100f957018035906001600160401b0382116100f9576020019181360383136100f957565b6001600160e01b0319903581811693926004811061091e57505050565b60040360031b82901b16169150565b6001600160601b0319903581811693926014811061094a57505050565b60140360031b82901b16169150565b634e487b7160e01b600052603260045260246000fd5b91908110156109915760051b81013590605e19813603018212156100f9570190565b610959565b356109a0816100e8565b90565b634e487b7160e01b600052604160045260246000fd5b606081019081106001600160401b038211176109d457604052565b6109a3565b90601f801991011681019081106001600160401b038211176109d457604052565b9190604051926020840152604083015260408252610a17826109b9565b565b610a4191610a29919493946109fa565b805160209182012090936001600160a01b03166109fa565b80519083012060405181548082529093918183019083805b838110610a6c5750505050830101604052565b8060051c83015481890152018490610a59565b91908110156109915760051b81013590609e19813603018212156100f9570190565b356001600160f81b0319811681036100f95790565b356001600160e01b0319811681036100f95790565b15610ad257565b60405162461bcd60e51b815260206004820152601860248201527f6475706c6963617465207065726d697373696f6e4861736800000000000000006044820152606490fd5b903590601e19813603018212156100f957018035906001600160401b0382116100f957602001918160051b360383136100f957565b600711156100f957565b600711156101a457565b356109a081610b4c565b15610b7157565b60405162461bcd60e51b815260206004820152602d60248201527f6f6e6c79204f6e654f6620636f6e646974696f6e2063616e2068617665206d7560448201526c6c7469706c6520706172616d7360981b6064820152608490fd5b6001600160401b038116036100f957565b81835290916001600160fb1b0383116100f95760209260051b809284830137010190565b90926040936040830190835281602091604083860152526060926060810160059660608560051b84010197876000945b878610610c45575050505050505050505090565b90919293949596979899605f198282030186528a35605e19843603018112156100f95783018035610c7581610b4c565b60078110156101a45782528881013590610c8e82610bcc565b6001600160401b038092168a84015286810135601e19823603018112156100f9570189813591019181116100f95780861b360382136100f957610cde8a9283928e86818c60019901520191610bdd565b9c0196019601949897969593929190610c31565b634e487b7160e01b600052601160045260246000fd5b60001981146106ed5760010190565b6001600160401b0381116109d45760051b60200190565b6040929181810384136100f957815193602091828401516001600160401b03948582116100f957019181601f840112156100f957825194610d6e86610d17565b95610d7b835197886109d9565b808752858701928660059260051b870101958587116100f957878101945b878610610dac5750505050505050505090565b85518581116100f957820160609081601f19828b0301126100f957845191610dd3836109b9565b8b820151610de081610b4c565b835285820151610def81610bcc565b8c840152810151908782116100f9570188603f820112156100f9578a81015190610e1882610d17565b91610e25875193846109d9565b808352868d840191891b830101918b83116100f95790878e959396949201905b868210610e6057505083945086820152815201950194610d99565b815181528e959182019101610e45565b8051156109915760200190565b80518210156109915760209160051b010190565b906001600160401b038092166004019182116106ed57565b9060206001600160401b03809316019182116106ed57565b90929084611265576000905b604080516001600160f81b0319602080830191825260609790971b6001600160601b03191660218301526001600160e01b031985166035830152919690939091610f3690849086603981015b0396610f2d601f19988981018352826109d9565b51902084610a19565b9384511561120d575b505050508051156111fc5780602080610f5d93518301019101610d2e565b905060005b81518110156111f157610f758183610e7d565b51610fc86104fc868301610fb4610faf610f9c610fa1610f9c85516001600160401b031690565b610e91565b93516001600160401b031690565b610ea9565b6001600160401b0380911691168a8861089a565b8151610fd381610b56565b610fdc81610b56565b15806111db575b15610ff5575050505050505050600090565b81519061100182610b56565b61100a82610b56565b6001809214806111c5575b1561102857505050505050505050600090565b6002835161103581610b56565b61103e81610b56565b14806111af575b1561105857505050505050505050600090565b6003835161106581610b56565b61106e81610b56565b148061119a575b1561108857505050505050505050600090565b6004835161109581610b56565b61109e81610b56565b1480611185575b156110b857505050505050505050600090565b600583516110c581610b56565b6110ce81610b56565b1480611170575b156110e857505050505050505050600090565b600683516110f581610b56565b6110fe81610b56565b1461110f575b505050600101610f62565b600092880183835b611138575b505050501561112d57388080611104565b505050505050600090565b8151805182101561116a578161114d91610e7d565b51831461115c57830183611117565b50505090503880808061111c565b5061111c565b5061117d88840151610e70565b5181146110d5565b5061119288840151610e70565b5181116110a5565b506111a788840151610e70565b518110611075565b506111bc88840151610e70565b51811015611045565b506111d288840151610e70565b51811115611015565b506111e887830151610e70565b51811415610fe3565b505050505050600190565b8351631c49f4d160e01b8152600490fd5b87516001600160f81b031960208201908152600060218301526001600160e01b0319909316603582015261125c9550906112539082603981015b039081018352826109d9565b51902090610a19565b38808080610f3f565b6112786112728684610850565b90610901565b90610ecd565b93949093919291856115c1576000905b6040958651926112d98360209886610f19856020830193849091601992600083526bffffffffffffffffffffffff199060601b16600183015263ffffffff60e01b1660158201520190565b93845115611583575b50505050805115611572578060208061130093518301019101610d2e565b91116115615760005b81518110156111f15761131c8183610e7d565b516113436104fc868301610fb4610faf610f9c610fa1610f9c85516001600160401b031690565b815161134e81610b56565b61135781610b56565b158061154b575b15611370575050505050505050600090565b81519061137c82610b56565b61138582610b56565b600180921480611535575b156113a357505050505050505050600090565b600283516113b081610b56565b6113b981610b56565b148061151f575b156113d357505050505050505050600090565b600383516113e081610b56565b6113e981610b56565b148061150a575b1561140357505050505050505050600090565b6004835161141081610b56565b61141981610b56565b14806114f5575b1561143357505050505050505050600090565b6005835161144081610b56565b61144981610b56565b14806114e0575b1561146357505050505050505050600090565b6006835161147081610b56565b61147981610b56565b1461148a575b505050600101611309565b600092880183835b6114a8575b505050501561112d5738808061147f565b815180518210156114da57816114bd91610e7d565b5183146114cc57830183611492565b505050905038808080611497565b50611497565b506114ed88840151610e70565b518114611450565b5061150288840151610e70565b518111611420565b5061151788840151610e70565b5181106113f0565b5061152c88840151610e70565b518110156113c0565b5061154288840151610e70565b51811115611390565b5061155887830151610e70565b5181141561135e565b8351631ed604b560e21b8152600490fd5b8451631c49f4d160e01b8152600490fd5b6115b8945061125389519182611247602082019586601991600082526000600183015263ffffffff60e01b1660158201520190565b388080806112e2565b6115ce6112728785610850565b9061128e565b93949093919291856118f5576000905b60409586519261162f8360209886610f19856020830193849091601992600083526bffffffffffffffffffffffff199060601b16600183015263ffffffff60e01b1660158201520190565b938451156118b7575b50505050805115611572578060208061165693518301019101610d2e565b91116115615760005b81518110156111f1576116728183610e7d565b516116996104fc868301610fb4610faf610f9c610fa1610f9c85516001600160401b031690565b81516116a481610b56565b6116ad81610b56565b15806118a1575b156116c6575050505050505050600090565b8151906116d282610b56565b6116db82610b56565b60018092148061188b575b156116f957505050505050505050600090565b6002835161170681610b56565b61170f81610b56565b1480611875575b1561172957505050505050505050600090565b6003835161173681610b56565b61173f81610b56565b1480611860575b1561175957505050505050505050600090565b6004835161176681610b56565b61176f81610b56565b148061184b575b1561178957505050505050505050600090565b6005835161179681610b56565b61179f81610b56565b1480611836575b156117b957505050505050505050600090565b600683516117c681610b56565b6117cf81610b56565b146117e0575b50505060010161165f565b600092880183835b6117fe575b505050501561112d573880806117d5565b81518051821015611830578161181391610e7d565b518314611822578301836117e8565b5050509050388080806117ed565b506117ed565b5061184388840151610e70565b5181146117a6565b5061185888840151610e70565b518111611776565b5061186d88840151610e70565b518110611746565b5061188288840151610e70565b51811015611716565b5061189888840151610e70565b518111156116e6565b506118ae87830151610e70565b518114156116b4565b6118ec945061125389519182611247602082019586601991600082526000600183015263ffffffff60e01b1660158201520190565b38808080611638565b6119026112728785610850565b906115e4565b90806014116100f957813560601c92816034116100f957601483013592603401916033190190565b61195891611940919594956109fa565b805160209182012090926001600160a01b03166109fa565b805160209182012084518082558201915b82811061197857505050509050565b8084918701518160051c8401550161196956"
636
+ };
637
+ var rateLimitPolicy = {
638
+ "repository": "https://github.com/cartesi/erc-4337-devnet",
639
+ "commit": "2d86aeea200a52919304b535454850182b80e563",
640
+ "source": "zerodev/kernel-rate-limit-policy/0.0.1/src/RateLimitPolicy.sol",
641
+ "package": "zerodev-kernel-ratelimit-policy@0.0.1",
642
+ "moduleType": 5,
643
+ "compiler": {
644
+ "solc": "0.8.24+commit.e11b9ed9",
645
+ "viaIR": true,
646
+ "optimizer": true,
647
+ "optimizerRuns": 200,
648
+ "evmVersion": "paris",
649
+ "bytecodeHash": "none",
650
+ "cborMetadata": false
651
+ },
652
+ "expectedAddress": "0xf63d4139b25c836334edd76641356c6b74c86873",
653
+ "packageExpectedAddress": "0xf63d4139B25c836334edD76641356c6b74C86873",
654
+ "runtimeCodeHash": "0xb4fffdb494637e8e5bfc15d6500202c252392b498e518668f896dc6da0221183",
655
+ "note": "Recompiling this source with this profile and the package's own vendored Kernel v3 dependency sources reproduces the package's own cannon expected address, so the pinned address is ZeroDev's. onInstall reads id followed by packed uint48 interval, count and startAt; checkUserOpPolicy decrements count per validated operation and returns 1, Kernel's signature-failure sentinel, once it is exhausted.",
656
+ "deploymentInput": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576106cb908161001c8239f35b600080fdfe60806040908082526004908136101561001757600080fd5b600090813560e01c908163244d6cb2146104a857508063309bfb76146104235780636d61fe70146102ae5780637129edce1461026c5780638712147a1461020c5780638a91b0e314610149578063d60b347f14610110578063d8ed2b3c146100aa5763ecd059611461008857600080fd5b346100a75760203660031901126100a757506005602092519135148152f35b80fd5b50823461010c578060031936011261010c576100c46104f6565b8335835260016020528183209060018060a01b0316835260205260ff818320541690519160038210156100f957602083838152f35b634e487b7160e01b815260218452602490fd5b5080fd5b50823461010c57602036600319011261010c5760209181906001600160a01b036101386104db565b168152808452205415159051908152f35b509160208060031936011261020857823567ffffffffffffffff811161020457610176903690850161050c565b8211610204573580855260018252828520338652825260ff838620541660038110156101f157906001869392036101ed578252600181528282203383528152828220805460ff191660021790555282208054909181156101da575060001901905580f35b634e487b7160e01b845260119052602483fd5b8280fd5b634e487b7160e01b865260218552602486fd5b8480fd5b8380fd5b509190346101ed57816003193601126101ed57606092829161022c6104f6565b9035825260026020528282209060018060a01b0316825260205220549065ffffffffffff8151928181168452818160301c166020850152841c1690820152f35b508290600319828136011261010c5760243567ffffffffffffffff81116101ed579061012091360301126100a757506102a760209235610570565b9051908152f35b509160208060031936011261020857823567ffffffffffffffff8111610204576102db903690850161050c565b9081831161041f57803591601f190182875260018452848720338852845260ff8588205416600381101561040c5790879493929161020457806006116102045780600c1161020457601211610208576103d79061033661053a565b908481013560d01c825284820190602681013560d01c8252602c88840191013560d01c81528487526002865287872033885286526103b38888209365ffffffffffff93848092511665ffffffffffff198754161786555116849065ffffffffffff60301b82549160301b169065ffffffffffff60301b1916179055565b51825465ffffffffffff60601b1916911660601b65ffffffffffff60601b16179055565b8252600181528282203383528152828220600160ff198254161790555282209081549060001982146101da5750600101905580f35b634e487b7160e01b885260218752602488fd5b8580fd5b509190346101ed5760803660031901126101ed5761043f6104f6565b5060643567ffffffffffffffff81116102085761045f903690830161050c565b505080358352600160205281832033845260205260ff8284205416906003821015610495575060010361010c5751908152602090f35b634e487b7160e01b845260219052602483fd5b905083346101ed5760203660031901126101ed576020926001600160a01b036104cf6104db565b16815280845220548152f35b600435906001600160a01b03821682036104f157565b600080fd5b602435906001600160a01b03821682036104f157565b9181601f840112156104f15782359167ffffffffffffffff83116104f157602083818601950101116104f157565b604051906060820182811067ffffffffffffffff82111761055a57604052565b634e487b7160e01b600052604160045260246000fd5b906000828152602090600182526040808220338352835260ff818320541660038110156106b75760010361010c578482526002835280822033835283528082206105b861053a565b90549365ffffffffffff918286168152828660301c168083830152838583019760601c16875280156106aa576000190183811161069657610629908987526002845285872033885284528587209065ffffffffffff60301b82549160301b169065ffffffffffff60301b1916179055565b8280875116915116019082821161068257968452600287528284203385529096529120805465ffffffffffff60601b19169190941660601b65ffffffffffff60601b1617909255905160d01b6001600160d01b03191690565b634e487b7160e01b85526011600452602485fd5b634e487b7160e01b86526011600452602486fd5b5060019750505050505050565b634e487b7160e01b83526021600452602483fd"
657
+ };
658
+ //#endregion
659
+ //#region ../contracts/artifacts/OaathKernelV4ValidityPolicy.json
660
+ var deployment = {
661
+ "deployer": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
662
+ "deployerRuntimeCodeHash": "0x2fa86add0aed31f33a762c9d88e807c475bd51d0f52bd0955754b2608f7e4989",
663
+ "salt": "0x0000000000000000000000000000000000000000000000000000000000000000",
664
+ "creationCodeHash": "0xeea8109cbab2718fca7e9f6f5c07fd75478f19881b5caeff659203d41981f62b",
665
+ "runtimeCodeHash": "0xb52f33e68aecb57bda6a5edeae51adbd01587b4b834766027d7b510a30354151",
666
+ "expectedAddress": "0x828ef0aa6d7e90dd39bb855afe9d9b4f9bd30152",
667
+ "deploymentInput": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234610016576107fa908161001c8239f35b600080fdfe60806040908082526004908136101561001757600080fd5b600090813560e01c908163309bfb76146104c0575080636d61fe70146102fe5780637129edce146102b65780637cb40d40146102355780638a91b0e3146100ff578063a27b9f7e146100dd578063d60b347f1461009f5763ecd059611461007d57600080fd5b3461009c57602036600319011261009c57506005602092519135148152f35b80fd5b5082346100d95760203660031901126100d95760209181906001600160a01b036100c7610511565b16815260018452205415159051908152f35b5080fd5b5082346100d957816003193601126100d95751631ba8f41560e01b8152602090f35b5091906020918260031936011261023157813567ffffffffffffffff811161022d5761012e903690840161052c565b939081850361021e57359381811061020a575b503385528481528185208486528152818520805460ff8160601c1660038110156101f7576001036101d05760ff60601b1916600160611b1790553385526001905283208054909181156101bd5750600019019055337f71b2179d55ae39dc556fbdadcb110059e5a2bf07ad89afdfe3c9bfd89b26fd238380a380f35b634e487b7160e01b855260119052602484fd5b5050905163f7f4235d60e01b81523392810192835260208301939093525081906040010390fd5b634e487b7160e01b885260218652602488fd5b60001990820360031b1b9093169238610141565b505051632f85588960e11b8152fd5b8480fd5b8380fd5b5082903461009c578160031936011261009c576001600160a01b03610258610511565b168152806020528181206024358252602052818120549165ffffffffffff9160ff8460601c1692825194818116865260301c16602085015260038310156102a3575060609350820152f35b634e487b7160e01b815260218552602490fd5b50829060031990828236011261009c576024359167ffffffffffffffff83116100d95761012090833603011261009c5750826102f7916020940190356105a0565b9051908152f35b50826020806003193601126104bc57833567ffffffffffffffff81116102315761032b903690860161052c565b9290606084036104ac5783831161022d578181359482601f1991810103011261022d576103648261035d85840161055a565b920161055a565b926001600160e01b03851661049c5765ffffffffffff8085169283158015610490575b6104805733885287835284882087895283528488209182549160ff8360601c16600381101561046d5761044a5716956bffffffffffff000000000000600160601b9260ff60601b198916906cffffffffffffffffffffffffff1916179160301b16171790553386526001815282862080546000198114610437576001019055825193845283015233917f100db2dcff8b9f90d654a68e5cc4b77d15a4bed5025c088e212dbcee4ed381f09190a380f35b634e487b7160e01b885260118952602488fd5b8651638ce0a3bb60e01b815233818d01908152602081018b905281906040010390fd5b634e487b7160e01b8b5260218c5260248bfd5b8451633ba7713360e11b81528990fd5b50838282161015610387565b8251632f85588960e11b81528790fd5b8151632f85588960e11b81528690fd5b8280fd5b9190503461009c57608036600319011261009c576024356001600160a01b0381160361009c576064359067ffffffffffffffff821161009c57506020926105099136910161052c565b505060018152f35b600435906001600160a01b038216820361052757565b600080fd5b9181601f840112156105275782359167ffffffffffffffff8311610527576020838186019501011161052757565b359065ffffffffffff8216820361052757565b903590601e1981360301821215610527570180359067ffffffffffffffff82116105275760200191813603831361052757565b60009033825281602052604082209082526020526040812090604051916060830183811067ffffffffffffffff8211176107e657604052549165ffffffffffff91828416825260ff6020830194848160301c16865260601c169460038610156107d25785604084015260018096148015906107ba575b6107605760608101602461062a828461056d565b905010801561078e575b610785576106419161056d565b60249291921161009c5750600401359163ffffffff858460f81c118015610776575b8015610768575b610760576001600160d01b0384161561072e57631ba8f415908460b01c1614801590610719575b6107125780808460801c169360501c16938415928315610705575b5082156106fa575b82156106ed575b50506106e85760d01b6001600160d01b03191660a09190911b65ffffffffffff60a01b1617905090565b90565b505090565b51168311905038806106bb565b8484101592506106b4565b51821684109250386106ac565b5050505090565b5069ffffffffffffffffffff83161515610691565b509051925192811660d01b6001600160d01b031916921660a01b65ffffffffffff60a01b169190911791506106e59050565b505050505090565b50808460d01c16151561066a565b5060ff8460f01c161515610663565b50505050505090565b50610799818361056d565b60041161023157356001600160e01b03191663e9ae5c5360e01b1415610634565b506107c961010082018261056d565b90501515610616565b634e487b7160e01b82526021600452602482fd5b634e487b7160e01b83526041600452602483fd"
668
+ };
669
+ //#endregion
670
+ //#region ../sdk/test/fixtures/kernel-rate-limit-deployment.json
671
+ var kernel_rate_limit_deployment_default = {
672
+ version: "oaath.kernel-rate-limit-artifact/v1",
673
+ repository: "https://github.com/zerodevapp/kernel-7579-plugins",
674
+ commit: "a267d7945f87fc54853b512c2c8d9316d6463e36",
675
+ source: "src/policies/RateLimitPolicy.sol",
676
+ moduleType: 5,
677
+ compiler: { "version": "0.8.30+commit.73712a01" },
678
+ expectedAddress: "0xe2663e2f94ef2dc11cc06a7914a037d78a0652dc",
679
+ runtimeCodeHash: "0x6bb7a4d8507d7824e806f730683d532961dc2117ce530a8216765ddd2b1f17b5",
680
+ deploymentInput: "0x00000000000000000000000000000000000000000000000000000000000000006080806040523460155761065a908161001b8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c908163309bfb76146105235750806348edf4e1146104b05780636d61fe701461034f5780637129edce146102245780638712147a146101ad5780638a91b0e314610106578063d8ed2b3c1461009c5763ecd059611461007757600080fd5b346100975760203660031901126100975760206040516005600435148152f35b600080fd5b34610097576040366003190112610097576100b5610568565b600435600052600060205260406000209060018060a01b031660005260205260ff6040600020541660405160038210156100f0576020918152f35b634e487b7160e01b600052602160045260246000fd5b60203660031901126100975760043567ffffffffffffffff81116100975761013290369060040161057e565b602011610097573560008181526020818152604080832033845290915281205490919060ff1660038110156101995760010361018a578152602081815260408083203384529091528120805460ff1916600217905580f35b63f22b4ce760e01b8252600482fd5b634e487b7160e01b83526021600452602483fd5b34610097576040366003190112610097576101c6610568565b600435600052600160205260406000209060018060a01b0316600052602052610220604060002054604051918165ffffffffffff80859460301c1691168390929165ffffffffffff60209181604085019616845216910152565b0390f35b60403660031901126100975760043560243567ffffffffffffffff811161009757610120906003199036030112610097576000818152600160209081526040808320338085529083528184209484526002835281842090845290915290208054909165ffffffffffff4281169260301c168210156102f6575b505065ffffffffffff8154169081156102e55765ffffffffffff602092600019011665ffffffffffff1982541617815565ffffffffffff60a01b905460701b16604051908152f35b6307ef6f4d60e31b60005260046000fd5b6103489165ffffffffffff82818061031e955460301c161682198754161786555416906105ac565b82546bffffffffffff000000000000191660309190911b6bffffffffffff00000000000016178255565b818061029d565b60203660031901126100975760043567ffffffffffffffff81116100975761037b90369060040161057e565b90816020116100975780356000818152602081815260408083203384529091528120549093919291601f19019060ff16600381101561049c5760011461048d57600c811061047e578060061161047a57602082013560d01c90600c1161047a5765ffffffffffff61042a81602661045895013560d01c16926104226103fe6105e0565b8281526020808201879052888a52600181526040808b20338c529091528920610616565b8242166105ac565b6104326105e0565b928352166020808301919091528385526002815260408086203387529091528420610616565b8152602081815260408083203384529091528120805460ff1916600117905580f35b8380fd5b632f85588960e11b8452600484fd5b631883696f60e31b8452600484fd5b634e487b7160e01b85526021600452602485fd5b34610097576040366003190112610097576104c9610568565b600435600052600260205260406000209060018060a01b0316600052602052610220604060002054604051918165ffffffffffff80859460301c1691168390929165ffffffffffff60209181604085019616845216910152565b346100975760803660031901126100975761053c610568565b506064359067ffffffffffffffff821161009757610560602092369060040161057e565b505060018152f35b602435906001600160a01b038216820361009757565b9181601f840112156100975782359167ffffffffffffffff8311610097576020838186019501011161009757565b9065ffffffffffff8091169116019065ffffffffffff82116105ca57565b634e487b7160e01b600052601160045260246000fd5b604051906040820182811067ffffffffffffffff82111761060057604052565b634e487b7160e01b600052604160045260246000fd5b81518154602093909301516bffffffffffffffffffffffff1990931665ffffffffffff919091161760309290921b6bffffffffffff0000000000001691909117905556"
681
+ };
682
+ //#endregion
683
+ //#region src/manifest.ts
684
+ function deployableComponent(create2Deployer, id, artifact, expectedAddress, required = true, passkeySession = false) {
685
+ const input = artifact.deploymentInput;
686
+ const salt = sliceHex(input, 0, 32);
687
+ if (salt !== `0x${"00".repeat(32)}`) throw new Error(`Nonzero deployment salt: ${id}`);
688
+ const address = getCreate2Address({
689
+ from: create2Deployer,
690
+ salt,
691
+ bytecode: sliceHex(input, 32)
692
+ }).toLowerCase();
693
+ if (expectedAddress !== null && address !== expectedAddress.toLowerCase()) throw new Error(`Deployment address mismatch: ${id}`);
694
+ return {
695
+ id,
696
+ address,
697
+ required,
698
+ passkeySession,
699
+ runtimeCodeHash: artifact.runtimeCodeHash ?? null,
700
+ deploymentInput: input
701
+ };
702
+ }
703
+ function components(chainId) {
704
+ const deployment$1 = kernelDeployment({ chainId });
705
+ const implementationHash = deployment$1.implementationDeployment?.runtimeCodeHash;
706
+ const deployable = (...args) => deployableComponent(deployment$1.create2Deployer, ...args);
707
+ return [
708
+ {
709
+ id: "entryPoint",
710
+ address: deployment$1.entryPoint.address,
711
+ required: true,
712
+ passkeySession: false,
713
+ runtimeCodeHash: deployment$1.entryPoint.runtimeCodeHash,
714
+ deploymentInput: null
715
+ },
716
+ {
717
+ id: "create2Deployer",
718
+ address: deployment$1.create2Deployer,
719
+ required: true,
720
+ passkeySession: false,
721
+ runtimeCodeHash: deployment.deployerRuntimeCodeHash,
722
+ deploymentInput: null
723
+ },
724
+ deployable("kernelUups", {
725
+ ...kernelUups,
726
+ ...implementationHash ? { runtimeCodeHash: implementationHash } : {}
727
+ }, deployment$1.implementation),
728
+ deployable("kernelImmutableEcdsa", kernelImmutableEcdsa, null),
729
+ deployable("kernelFactory", {
730
+ ...kernelFactory,
731
+ runtimeCodeHash: deployment$1.factoryRuntimeCodeHash
732
+ }, deployment$1.factory),
733
+ deployable("validityPolicy", deployment, pinnedPolicyModule("expiry")),
734
+ deployable("callPolicy", callPolicy, pinnedPolicyModule("call")),
735
+ deployable("rateLimitPolicy", rateLimitPolicy, pinnedPolicyModule("operation-limit")),
736
+ deployable("resettingRateLimitPolicy", {
737
+ ...kernel_rate_limit_deployment_default,
738
+ runtimeCodeHash: OAATH_KERNEL_RATE_LIMIT_POLICY_RUNTIME_CODE_HASH
739
+ }, pinnedPolicyModule("rate-limit")),
740
+ deployable("ecdsaSigner", ecdsaSigner, pinnedSignerModule("ecdsa")),
741
+ deployable("p256Validator", p256Validator, p256Validator.expectedAddress, false),
742
+ deployable("webAuthnSigner", webAuthnSigner, pinnedSignerModule("webauthn"), false, true),
743
+ deployable("p256Verifier", p256Verifier, p256Verifier.expectedAddress, false, true)
744
+ ];
745
+ }
746
+ //#endregion
747
+ //#region src/doctor.ts
748
+ function quantity(value) {
749
+ if (typeof value !== "string" || !/^0x(?:0|[1-9a-f][0-9a-f]*)$/u.test(value) || value.length > 66) throw new Error("rpc_invalid_quantity");
750
+ return BigInt(value);
751
+ }
752
+ async function inspect(component, rpc, block) {
753
+ const base = {
754
+ id: component.id,
755
+ address: component.address,
756
+ required: component.required,
757
+ passkeySession: component.passkeySession
758
+ };
759
+ try {
760
+ const code = await rpc.request("eth_getCode", [component.address, block]);
761
+ if (typeof code !== "string" || !/^0x(?:[0-9a-fA-F]{2})*$/u.test(code) || code.length > 131074) throw new Error();
762
+ if (code === "0x") return {
763
+ ...base,
764
+ status: "missing",
765
+ runtimeCodeHash: null
766
+ };
767
+ const hash = keccak256(code);
768
+ const status = component.runtimeCodeHash === null ? "present" : hash === component.runtimeCodeHash ? "verified" : "mismatch";
769
+ return {
770
+ ...base,
771
+ status,
772
+ runtimeCodeHash: hash
773
+ };
774
+ } catch {
775
+ return {
776
+ ...base,
777
+ status: "unreadable",
778
+ runtimeCodeHash: null
779
+ };
780
+ }
781
+ }
782
+ /** A readiness snapshot, not a deployment claim or a transaction-finality proof. */
783
+ async function doctor(chainId, rpc) {
784
+ const manifest = components(chainId);
785
+ const base = {
786
+ version: "oaath.runtime-readiness/v2",
787
+ chainId,
788
+ checkedAt: (/* @__PURE__ */ new Date()).toISOString()
789
+ };
790
+ let observedChainId = null;
791
+ let block;
792
+ const failed = (error) => ({
793
+ ...base,
794
+ observedChainId,
795
+ blockNumber: null,
796
+ ready: false,
797
+ passkeySessionsReady: false,
798
+ error,
799
+ factoryBinding: "unreadable",
800
+ components: manifest.map(({ id, address, required, passkeySession }) => ({
801
+ id,
802
+ address,
803
+ required,
804
+ passkeySession,
805
+ status: "unreadable",
806
+ runtimeCodeHash: null
807
+ }))
808
+ });
809
+ try {
810
+ const observed = quantity(await rpc.request("eth_chainId"));
811
+ if (observed > BigInt(Number.MAX_SAFE_INTEGER)) throw new Error();
812
+ observedChainId = Number(observed);
813
+ if (observedChainId !== chainId) return failed("chain_mismatch");
814
+ block = `0x${quantity(await rpc.request("eth_blockNumber")).toString(16)}`;
815
+ } catch {
816
+ return failed("rpc_unavailable");
817
+ }
818
+ const reports = [];
819
+ for (let offset = 0; offset < manifest.length; offset += 4) reports.push(...await Promise.all(manifest.slice(offset, offset + 4).map((component) => inspect(component, rpc, block))));
820
+ let factoryBinding = "unreadable";
821
+ const factory = reports.find((row) => row.id === "kernelFactory");
822
+ if (factory?.status === "verified") try {
823
+ const result = await rpc.request("eth_call", [{
824
+ to: factory.address,
825
+ data: encodeKernelV4FactoryImplementationRead()
826
+ }, block]);
827
+ if (typeof result !== "string" || !/^0x0{24}[0-9a-fA-F]{40}$/u.test(result)) throw new Error();
828
+ const [address] = decodeAbiParameters([{ type: "address" }], result);
829
+ factoryBinding = address.toLowerCase() === kernelDeployment({ chainId }).implementation ? "verified" : "mismatch";
830
+ } catch {}
831
+ const ready = factoryBinding === "verified" && reports.filter((row) => row.required).every((row) => row.status === "verified" || row.status === "present");
832
+ return {
833
+ ...base,
834
+ observedChainId,
835
+ blockNumber: BigInt(block).toString(),
836
+ ready,
837
+ passkeySessionsReady: ready && reports.filter((row) => row.passkeySession).every((row) => row.status === "verified"),
838
+ error: null,
839
+ factoryBinding,
840
+ components: reports
841
+ };
842
+ }
843
+ //#endregion
844
+ //#region src/rpc.ts
845
+ /** One explicit endpoint, no fallback or retries, bounded time and request count. */
846
+ var Rpc = class {
847
+ url;
848
+ #requests = 0;
849
+ #deadline;
850
+ #maxRequests;
851
+ #fetch;
852
+ constructor(url, options = {}) {
853
+ this.url = url;
854
+ const parsed = new URL(url);
855
+ if (!["http:", "https:"].includes(parsed.protocol)) throw new Error("rpc_url_invalid");
856
+ this.#maxRequests = options.maxRequests ?? 32;
857
+ this.#deadline = Date.now() + (options.durationMs ?? 6e4);
858
+ this.#fetch = options.fetch ?? fetch;
859
+ }
860
+ async request(method, params = []) {
861
+ if (this.#requests >= this.#maxRequests) throw new Error("rpc_budget_exhausted");
862
+ const remaining = this.#deadline - Date.now();
863
+ if (remaining <= 0) throw new Error("rpc_deadline_exhausted");
864
+ const id = ++this.#requests;
865
+ let payload;
866
+ try {
867
+ const response = await this.#fetch(this.url, {
868
+ method: "POST",
869
+ headers: { "content-type": "application/json" },
870
+ body: JSON.stringify({
871
+ jsonrpc: "2.0",
872
+ id,
873
+ method,
874
+ params
875
+ }),
876
+ signal: AbortSignal.timeout(Math.min(5e3, remaining)),
877
+ redirect: "error"
878
+ });
879
+ if (!response.ok) throw new Error();
880
+ payload = await response.json();
881
+ } catch {
882
+ throw new Error("rpc_unavailable");
883
+ }
884
+ if (!payload || typeof payload !== "object" || Array.isArray(payload)) throw new Error("rpc_invalid_response");
885
+ const record = payload;
886
+ if (record.jsonrpc !== "2.0" || record.id !== id || !("result" in record) || "error" in record) throw new Error("rpc_invalid_response");
887
+ return record.result;
888
+ }
889
+ };
890
+ //#endregion
891
+ //#region src/cli.ts
892
+ const PUBLIC_RPCS = {
893
+ 143: "https://rpc.monad.xyz",
894
+ 480: "https://worldchain-mainnet.g.alchemy.com/public",
895
+ 4326: "https://mainnet.megaeth.com/rpc",
896
+ 4217: "https://rpc.mainnet.tempo.xyz",
897
+ 4663: "https://rpc.mainnet.chain.robinhood.com",
898
+ 5042: "https://rpc.mainnet.arc.io"
899
+ };
900
+ const HELP = `Usage: oaath doctor --chain <id> [--rpc <url>] [--json]
901
+ oaath deploy-runtime --chain <id> --rpc <url> [--dry-run] [--journal <path>] [--json]
902
+
903
+ Checks the Kernel v4 / EntryPoint 0.7 ECDSA session module set.
904
+ Owner validators remain application-selected. Passkey (WebAuthn) session
905
+ readiness, the WebAuthn signer and P-256 verifier with pinned hashes, is reported
906
+ separately and never gates the exit code. No wallet or transaction is used.
907
+ Defaults exist for chains 143, 480, 4326, 4217, 4663 and 5042.
908
+ RPC bounds: 32 requests, four in flight, 5 seconds per request, 60 seconds total,
909
+ no retries or fallback. --rpc explicitly selects one endpoint.
910
+ deploy-runtime requires an explicit --rpc and OAATH_DEPLOYER_PRIVATE_KEY for new
911
+ transactions. --dry-run checks prerequisites and lists missing contracts without
912
+ loading a key. Deployment bounds: 256 requests, 180 seconds total, gas <= 10M
913
+ per transaction. Receipt observation never resends an attempted transaction.
914
+ Exit: 0 runtime ready or successful dry run, 1 incomplete or unreadable, 2 invalid command.
915
+ `;
916
+ async function main() {
917
+ let parsed;
918
+ try {
919
+ parsed = parseArgs({
920
+ allowPositionals: true,
921
+ options: {
922
+ chain: { type: "string" },
923
+ rpc: { type: "string" },
924
+ json: { type: "boolean" },
925
+ "dry-run": { type: "boolean" },
926
+ journal: { type: "string" },
927
+ help: {
928
+ type: "boolean",
929
+ short: "h"
930
+ }
931
+ }
932
+ });
933
+ } catch {
934
+ console.error(HELP);
935
+ process.exitCode = 2;
936
+ return;
937
+ }
938
+ const { positionals, values } = parsed;
939
+ if (values.help || positionals.length === 0) {
940
+ console.log(HELP);
941
+ return;
942
+ }
943
+ const chainId = typeof values.chain === "string" && /^[1-9][0-9]*$/u.test(values.chain) ? Number(values.chain) : NaN;
944
+ const deploying = positionals[0] === "deploy-runtime";
945
+ if (positionals.length !== 1 || !deploying && positionals[0] !== "doctor" || !Number.isSafeInteger(chainId) || !deploying && (values["dry-run"] !== void 0 || values.journal !== void 0)) {
946
+ console.error(HELP);
947
+ process.exitCode = 2;
948
+ return;
949
+ }
950
+ const url = typeof values.rpc === "string" ? values.rpc : deploying ? void 0 : PUBLIC_RPCS[chainId];
951
+ if (!url) {
952
+ console.error("Supply --rpc <url>; deployment always requires an explicit endpoint.");
953
+ process.exitCode = 2;
954
+ return;
955
+ }
956
+ let rpc;
957
+ try {
958
+ rpc = new Rpc(url, deploying ? {
959
+ maxRequests: 256,
960
+ durationMs: 18e4
961
+ } : {});
962
+ } catch {
963
+ console.error("Invalid RPC URL; use http or https.");
964
+ process.exitCode = 2;
965
+ return;
966
+ }
967
+ if (deploying) {
968
+ const [{ deployRuntime, DeploymentError }, { DeploymentJournal }, { privateKeyToAccount }, { homedir }, { join, resolve }] = await Promise.all([
969
+ import("./deploy-BtvOPlub.mjs"),
970
+ import("./journal-DkNIXY4X.mjs"),
971
+ import("viem/accounts"),
972
+ import("node:os"),
973
+ import("node:path")
974
+ ]);
975
+ const path = typeof values.journal === "string" ? resolve(values.journal) : join(homedir(), ".local", "state", "oaath", "runtime.sqlite");
976
+ const journal = new DeploymentJournal(values["dry-run"] ? ":memory:" : path);
977
+ try {
978
+ const result = await deployRuntime({
979
+ chainId,
980
+ rpc,
981
+ journal,
982
+ dryRun: values["dry-run"] === true,
983
+ account: () => {
984
+ const key = process.env.OAATH_DEPLOYER_PRIVATE_KEY;
985
+ if (!key) throw new DeploymentError("deployment_key_required");
986
+ if (!/^0x[0-9a-fA-F]{64}$/u.test(key)) throw new DeploymentError("deployment_key_invalid");
987
+ try {
988
+ return privateKeyToAccount(key);
989
+ } catch {
990
+ throw new DeploymentError("deployment_key_invalid");
991
+ }
992
+ }
993
+ });
994
+ if (values.json) console.log(JSON.stringify(result, null, 2));
995
+ else {
996
+ console.log(`Chain ${chainId}: ${result.status}`);
997
+ if (result.missing.length) console.log(`Missing: ${result.missing.join(", ")}`);
998
+ for (const row of result.readiness.components.filter((row) => row.required)) console.log(`${row.id.padEnd(22)} ${row.address} ${row.status}`);
999
+ if (result.transactionHash) console.log(`Observe transaction ${result.transactionHash}; rerun with the same journal. No resend will occur.`);
1000
+ if (!values["dry-run"]) console.log(`Journal: ${path}`);
1001
+ }
1002
+ process.exitCode = result.status === "ready" || values["dry-run"] && result.status === "planned" ? 0 : 1;
1003
+ } catch (error) {
1004
+ console.error(error instanceof DeploymentError ? error.code : "deployment_unavailable");
1005
+ console.error("Retain the journal. Rerunning observes any saved attempt before allowing another deployment.");
1006
+ process.exitCode = 1;
1007
+ } finally {
1008
+ journal.close();
1009
+ }
1010
+ return;
1011
+ }
1012
+ const report = await doctor(chainId, rpc);
1013
+ if (values.json) console.log(JSON.stringify(report, null, 2));
1014
+ else {
1015
+ console.log(`Chain ${chainId}: ${report.ready ? "runtime ready" : "not ready"} — ${report.checkedAt}`);
1016
+ console.log(`Block: ${report.blockNumber ?? "unreadable"}; factory binding: ${report.factoryBinding}`);
1017
+ if (report.error) console.log(`Error: ${report.error}`);
1018
+ for (const row of report.components) console.log(`${row.id.padEnd(22)} ${row.address} ${row.status}${row.required ? "" : row.passkeySession ? " (passkey sessions)" : " (optional)"}`);
1019
+ console.log(`Passkey sessions: ${report.passkeySessionsReady ? "ready" : "not ready"}`);
1020
+ console.log("present = code at the canonical CREATE2 address; verified = pinned runtime hash matches.");
1021
+ console.log("Readiness covers the ECDSA session set; verify your chosen owner validator separately.");
1022
+ }
1023
+ process.exitCode = report.ready ? 0 : 1;
1024
+ }
1025
+ main().catch(() => {
1026
+ console.error("Runtime check failed; no readiness claim was made.");
1027
+ process.exitCode = 1;
1028
+ });
1029
+ //#endregion
1030
+ export { components as n, kernelDeployment as r, doctor as t };