cursedbelt 5.111.0 → 5.112.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.
@@ -8,4 +8,5 @@ export { judgeKeyboard, judgePhone, type KeyboardView, type PhoneSnapshot, type
8
8
  export { type SafariResult, type SafariScreen, SafariSession, type WalkSafariOptions, walkSafari } from './safariDriver.js';
9
9
  export { explainSafari, findGaps, judgeSupport, type StyleClaims, type StyleGaps, styleClaims } from './safariRules.js';
10
10
  export { type LookPrePaint, lookPrePaintProblems, readBootLookFallback, readLookPrePaint } from './lookPrePaint.js';
11
+ export { launchPersistentWebkit, launchWebkit, readyWebkitKeychain } from './webkitKeychain.js';
11
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGpD,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,gBAAgB,EAChB,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,YAAY,EACZ,KAAK,aAAa,GACnB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,YAAY,EACZ,WAAW,EACX,uBAAuB,EACvB,KAAK,oBAAoB,GAC1B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,iBAAiB,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACtG,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACxI,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC5H,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,WAAW,EAAE,KAAK,SAAS,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAExH,OAAO,EAAE,KAAK,YAAY,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGpD,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,gBAAgB,EAChB,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,YAAY,EACZ,KAAK,aAAa,GACnB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,YAAY,EACZ,WAAW,EACX,uBAAuB,EACvB,KAAK,oBAAoB,GAC1B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,iBAAiB,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACtG,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACxI,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC5H,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,WAAW,EAAE,KAAK,SAAS,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAExH,OAAO,EAAE,KAAK,YAAY,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGpH,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -14,4 +14,7 @@ export { SafariSession, walkSafari } from './safariDriver.js';
14
14
  export { explainSafari, findGaps, judgeSupport, styleClaims } from './safariRules.js';
15
15
  // An app's pre-paint look script held to the look store and its initLook() (forge task 2916).
16
16
  export { lookPrePaintProblems, readBootLookFallback, readLookPrePaint } from './lookPrePaint.js';
17
+ // The one way a spec launches WebKit: a keychain master key another WebKit build made is dropped first, so no
18
+ // password dialog waits on the owner's screen (forge task 4347). `tools/check-test-spawn.ts` refuses any other launch.
19
+ export { launchPersistentWebkit, launchWebkit, readyWebkitKeychain } from './webkitKeychain.js';
17
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAmB,MAAM,cAAc,CAAC;AACnF,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACpD,sFAAsF;AACtF,gGAAgG;AAChG,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,YAAY,EAMZ,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,gBAAgB,EAGhB,YAAY,GAEb,MAAM,kBAAkB,CAAC;AAC1B,iGAAiG;AACjG,4FAA4F;AAC5F,OAAO,EACL,aAAa,EACb,kBAAkB,EAGlB,YAAY,EACZ,WAAW,EACX,uBAAuB,GAExB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAA0C,UAAU,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACtG,OAAO,EAAE,aAAa,EAAE,UAAU,EAA2D,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACxI,OAAO,EAAwC,aAAa,EAA0B,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC5H,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAoC,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACxH,8FAA8F;AAC9F,OAAO,EAAqB,oBAAoB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAmB,MAAM,cAAc,CAAC;AACnF,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACpD,sFAAsF;AACtF,gGAAgG;AAChG,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,YAAY,EAMZ,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,gBAAgB,EAGhB,YAAY,GAEb,MAAM,kBAAkB,CAAC;AAC1B,iGAAiG;AACjG,4FAA4F;AAC5F,OAAO,EACL,aAAa,EACb,kBAAkB,EAGlB,YAAY,EACZ,WAAW,EACX,uBAAuB,GAExB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAA0C,UAAU,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACtG,OAAO,EAAE,aAAa,EAAE,UAAU,EAA2D,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACxI,OAAO,EAAwC,aAAa,EAA0B,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC5H,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAoC,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACxH,8FAA8F;AAC9F,OAAO,EAAqB,oBAAoB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACpH,8GAA8G;AAC9G,uHAAuH;AACvH,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"phoneRules.d.ts","sourceRoot":"","sources":["../../src/testing/phoneRules.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEtE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,qFAAqF;IACrF,MAAM,EAAE,OAAO,CAAC;IAChB,6FAA6F;IAC7F,SAAS,EAAE,OAAO,CAAC;IACnB,mGAAmG;IACnG,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,8FAA8F;IAC9F,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9C,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,yGAAyG;AACzG,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,wFAAwF;AACxF,eAAO,MAAM,UAAU,KAAK,CAAC;AAC7B,6FAA6F;AAC7F,eAAO,MAAM,YAAY,KAAK,CAAC;AAC/B,4DAA4D;AAC5D,eAAO,MAAM,KAAK,KAAK,CAAC;AAExB,oGAAoG;AACpG,eAAO,MAAM,gBAAgB,EAAE,SAAS,YAAY,EAAmC,CAAC;AASxF,sIAAsI;AACtI,wBAAgB,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,GAAG,IAAI,CAWjF;AAED,MAAM,WAAW,iBAAiB;IAChC,kGAAkG;IAClG,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,2CAA2C;AAC3C,wBAAgB,UAAU,CAAC,CAAC,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,EAAE,iBAAiB,GAAG,eAAe,EAAE,CAkB5F;AAED,uHAAuH;AACvH,wBAAgB,aAAa,CAAC,CAAC,EAAE,YAAY,GAAG,eAAe,EAAE,CAOhE;AAED,kGAAkG;AAClG,eAAO,MAAM,UAAU,GAAI,UAAU,eAAe,EAAE,KAAG,eAAe,EAAgE,CAAC;AAIzI,eAAO,MAAM,aAAa,0MAA0M,CAAC;AACrO,eAAO,MAAM,YAAY,mKAAmK,CAAC;AAE7L,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,gBAAgB,GAAG,aAAa,CAwLvE"}
1
+ {"version":3,"file":"phoneRules.d.ts","sourceRoot":"","sources":["../../src/testing/phoneRules.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEtE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,qFAAqF;IACrF,MAAM,EAAE,OAAO,CAAC;IAChB,6FAA6F;IAC7F,SAAS,EAAE,OAAO,CAAC;IACnB,mGAAmG;IACnG,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,8FAA8F;IAC9F,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9C,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,yGAAyG;AACzG,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,wFAAwF;AACxF,eAAO,MAAM,UAAU,KAAK,CAAC;AAC7B,6FAA6F;AAC7F,eAAO,MAAM,YAAY,KAAK,CAAC;AAC/B,4DAA4D;AAC5D,eAAO,MAAM,KAAK,KAAK,CAAC;AAExB,oGAAoG;AACpG,eAAO,MAAM,gBAAgB,EAAE,SAAS,YAAY,EAAmC,CAAC;AASxF,sIAAsI;AACtI,wBAAgB,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,GAAG,IAAI,CAWjF;AAED,MAAM,WAAW,iBAAiB;IAChC,kGAAkG;IAClG,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,2CAA2C;AAC3C,wBAAgB,UAAU,CAAC,CAAC,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,EAAE,iBAAiB,GAAG,eAAe,EAAE,CAkB5F;AAED,uHAAuH;AACvH,wBAAgB,aAAa,CAAC,CAAC,EAAE,YAAY,GAAG,eAAe,EAAE,CAOhE;AAED,kGAAkG;AAClG,eAAO,MAAM,UAAU,GAAI,UAAU,eAAe,EAAE,KAAG,eAAe,EAAgE,CAAC;AAIzI,eAAO,MAAM,aAAa,0MAA0M,CAAC;AACrO,eAAO,MAAM,YAAY,mKAAmK,CAAC;AAE7L,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,gBAAgB,GAAG,aAAa,CA2LvE"}
@@ -211,10 +211,13 @@ export function measurePhone(selectors) {
211
211
  for (const el of outer) {
212
212
  const box = el.getBoundingClientRect();
213
213
  // Only what is on screen can be hit, or hit-tested: the rest is judged when a scroll brings it here.
214
+ // On screen is [left, right) × [top, bottom), as hit-testing owns a box: a middle ON the clip's bottom
215
+ // edge is the next box's point — station's Uploads "Open" at 582–626 in a pane ending at 604 hit the
216
+ // static tab bar there once webkit-2370 laid the bar at 604 exactly, and read as under it (forge task 4321).
214
217
  const view = clips(el);
215
218
  const mx = box.left + box.width / 2;
216
219
  const my = box.top + box.height / 2;
217
- if (mx < Math.max(0, view.left) || mx > Math.min(W, view.right) || my < Math.max(0, view.top) || my > Math.min(H, view.bottom))
220
+ if (mx < Math.max(0, view.left) || mx >= Math.min(W, view.right) || my < Math.max(0, view.top) || my >= Math.min(H, view.bottom))
218
221
  continue;
219
222
  // At the edge of its pane its reach is cut by the edge: its size is judged on a screen where it has room.
220
223
  const room = 12;
@@ -1 +1 @@
1
- {"version":3,"file":"phoneRules.js","sourceRoot":"","sources":["../../src/testing/phoneRules.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"phoneRules.js","sourceRoot":"","sources":["../../src/testing/phoneRules.ts"],"names":[],"mappings":"AA8DA,wFAAwF;AACxF,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,CAAC;AAC7B,6FAA6F;AAC7F,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,CAAC;AAC/B,4DAA4D;AAC5D,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;AAExB,oGAAoG;AACpG,MAAM,CAAC,MAAM,gBAAgB,GAA4B,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAExF,uDAAuD;AACvD,SAAS,KAAK,CAAC,EAAU,EAAE,EAAU,EAAE,CAAc;IACnD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC5B,CAAC;AAED,sIAAsI;AACtI,MAAM,UAAU,OAAO,CAAC,MAAmB,EAAE,MAAqB;IAChE,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,YAAY,GAAG,CAAC,CAAC;IAC9B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,CAAC,MAAM;YAAE,SAAS;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC;QACxD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC;QACzI,IAAI,IAAI;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC;IAC9B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAOD,2CAA2C;AAC3C,MAAM,UAAU,UAAU,CAAC,CAAgB,EAAE,EAAE,KAAK,EAAqB;IACvE,MAAM,KAAK,GAAsB,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,CAAC,IAAkB,EAAE,QAAgB,EAAE,MAAc,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9G,IAAI,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC;QAAE,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,gCAAgC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IAC3H,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS;QAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC,KAAK,gBAAgB,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACtM,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACrE,KAAK,MAAM,CAAC,IAAI,OAAO;QAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,SAAS,+BAA+B,CAAC,CAAC;IACpG,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,UAAU,CAAC;QAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,kDAAkD,UAAU,IAAI,CAAC,CAAC;IAC/J,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC;QAClG,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,QAAQ;YAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,YAAY,uBAAuB,QAAQ,EAAE,CAAC,CAAC;IACtI,CAAC;IACD,4GAA4G;IAC5G,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,YAAY,GAAG,GAAG,CAAC,CAAC;IAC7I,KAAK,MAAM,CAAC,IAAI,OAAO;QAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,0CAA0C,KAAK,IAAI,CAAC,CAAC;IAC1I,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,yDAAyD,CAAC,CAAC;IACxI,OAAO,KAAK,CAAC;AACf,CAAC;AAED,uHAAuH;AACvH,MAAM,UAAU,aAAa,CAAC,CAAe;IAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC;IAC/C,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;QACvD,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,0CAA0C,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5M,CAAC;IACD,IAAI,CAAC,CAAC,SAAS;QAAE,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,SAAS,2BAA2B,EAAE,CAAC,CAAC;IACzH,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,kGAAkG;AAClG,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,QAA2B,EAAqB,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAEzI,gGAAgG;AAEhG,MAAM,CAAC,MAAM,aAAa,GAAG,uMAAuM,CAAC;AACrO,MAAM,CAAC,MAAM,YAAY,GAAG,gKAAgK,CAAC;AAO7L;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,SAA2B;IACtD,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC;IAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC;IAC7B,MAAM,IAAI,GAAG,CAAC,EAAW,EAAU,EAAE;QACnC,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7K,2GAA2G;QAC3G,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,0DAA0D,CAAC,EAAE,YAAY,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACjJ,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACrH,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,EAAW,EAAW,EAAE;QACrC,IAAI,EAAE,CAAC,OAAO,CAAC,uCAAuC,CAAC;YAAE,OAAO,KAAK,CAAC;QACtE,2FAA2F;QAC3F,8FAA8F;QAC9F,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QACjD,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,kBAAkB,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;YAAE,OAAO,KAAK,CAAC;QACpF,MAAM,CAAC,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;QACrC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAC9C,MAAM,KAAK,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACnC,uGAAuG;QACvG,IAAI,KAAK,CAAC,QAAQ,KAAK,YAAY,IAAI,2CAA2C,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QAClH,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC;IACnE,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,CAAC,EAAW,EAAU,EAAE;QACtC,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,IAAI,IAAI,GAAmB,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,aAAa;YAAE,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC;QACnI,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;IACF,0FAA0F;IAC1F,MAAM,OAAO,GAAG,CAAC,GAAG,QAAQ,CAAC,gBAAgB,CAAC,mFAAmF,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClJ,MAAM,KAAK,GAAY,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC;IACvD,MAAM,KAAK,GAAG,CAAC,EAAW,EAAW,EAAE;QACrC,IAAI,GAAG,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAClC,KAAK,IAAI,IAAI,GAAG,EAAE,CAAC,aAAa,EAAE,IAAI,IAAI,IAAI,KAAK,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YAC5F,MAAM,CAAC,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS;gBAAE,SAAS;YACrE,MAAM,CAAC,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;YACvC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACxC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;YACrC,GAAG,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACpI,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IACF,MAAM,QAAQ,GAAG,CAAC,EAAW,EAAW,EAAE;QACxC,KAAK,IAAI,IAAI,GAAG,EAAE,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YAClE,MAAM,CAAC,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC;QAClG,CAAC;QACD,OAAO,QAAQ,CAAC,gBAAgB,IAAI,QAAQ,CAAC,eAAe,CAAC;IAC/D,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,EAAW,EAAkB,EAAE;QAC7C,KAAK,IAAI,IAAI,GAAmB,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACpE,MAAM,CAAC,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;YAC1C,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC;QACnD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,gBAAgB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAC,aAAa,KAAK,MAAM,CAAC,CAAC;IACtI,yFAAyF;IACzF,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3F,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAW,EAAW,EAAE;QAC1D,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QACrD,MAAM,GAAG,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5C,IAAI,CAAC,GAAG;YAAE,OAAO,KAAK,CAAC;QACvB,IAAI,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAChD,2FAA2F;QAC3F,8FAA8F;QAC9F,6FAA6F;QAC7F,sFAAsF;QACtF,uEAAuE;QACvE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,uEAAuE,CAAC;YAAE,OAAO,KAAK,CAAC;QACvG,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,sDAAsD,CAAC,CAAC;QACjF,OAAO,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;IACzF,CAAC,CAAC;IACF;;;;;;OAMG;IACH,MAAM,OAAO,GAAG,CAAC,EAAW,EAAE,CAAU,EAA4C,EAAE;QACpF,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;QAChC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAChC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE;YAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QACxF,iGAAiG;QACjG,4FAA4F;QAC5F,8FAA8F;QAC9F,qDAAqD;QACrD,IAAI,EAAE,CAAC,OAAO,CAAC,uEAAuE,CAAC,EAAE,CAAC;YACxF,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,sDAAsD,CAAC,CAAC;YACjF,IAAI,KAAK,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;gBAC1B,MAAM,CAAC,GAAG,KAAK,CAAC,qBAAqB,EAAE,CAAC;gBACxC,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;YAC1F,CAAC;QACH,CAAC;QACD,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC1B,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QACzE,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE;YACrC,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC7D,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACrC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACpC,CAAC,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;YAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;QAChF,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,iGAAiG;QACjG,+FAA+F;QAC/F,MAAM,MAAM,GAAG,CAAC,EAAU,EAAE,EAAU,EAAE,IAAY,EAAE,EAAE;YACtD,IAAI,CAAC,GAAG,IAAI,CAAC;YACb,OAAO,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;gBAAE,CAAC,EAAE,CAAC;YACrE,IAAI,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,KAAK,GAAG,IAAI,CAAC;YACxE,OAAO,CAAC,CAAC;QACX,CAAC,CAAC;QACF,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAChE,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;IACzB,CAAC,CAAC;IACF,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;QACvC,qGAAqG;QACrG,uGAAuG;QACvG,qGAAqG;QACrG,6GAA6G;QAC7G,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;QACvB,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;QACpC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;QACpC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;YAAE,SAAS;QAC3I,0GAA0G;QAC1G,MAAM,IAAI,GAAG,EAAE,CAAC;QAChB,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAC7B,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;QAC1M,4DAA4D;QAC5D,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QACpE,MAAM,KAAK,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACnC,MAAM,UAAU,GAAG,CAAC,EAAE,CAAC,aAAa,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC;QACvE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;QACnG,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;QAC/D,MAAM,SAAS,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,MAAM,IAAI,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;QACxF,IAAI,SAAS,GAAkB,IAAI,CAAC;QACpC,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,MAAM,GAAG,GAAG,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9C,IAAI,GAAG,IAAI,GAAG,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;YAChE,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YACtB,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAC1B,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;YAClD,mFAAmF;YACnF,IAAI,GAAG,CAAC,OAAO,CAAC,uBAAuB,CAAC;gBAAE,SAAS,GAAG,IAAI,CAAC;YAC3D,8FAA8F;YAC9F,2FAA2F;iBACtF,IAAI,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,gDAAgD,CAAC;gBAAE,SAAS,GAAG,IAAI,CAAC;iBACzH,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAAE,SAAS,GAAG,KAAK,CAAC;iBACpD,CAAC;gBACJ,MAAM,CAAC,GAAG,KAAK,CAAC,qBAAqB,EAAE,CAAC;gBACxC,MAAM,CAAC,GAAG,IAAI,KAAK,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBACtG,8HAA8H;gBAC9H,SAAS,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;YAC1G,CAAC;QACH,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IAC/H,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAErK,MAAM,SAAS,GAAyD,EAAE,CAAC;IAC3E,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,KAAK,MAAM,EAAE,IAAI,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;QACrD,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAAE,SAAS;QACjE,MAAM,CAAC,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;QACrC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;YAAE,SAAS;QAC/C,oGAAoG;QACpG,IAAI,IAAI,GAAG,KAAK,CAAC;QACjB,KAAK,IAAI,IAAI,GAAG,EAAE,CAAC,aAAa,EAAE,IAAI,IAAI,IAAI,KAAK,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YAC5F,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBACnD,IAAI,GAAG,IAAI,CAAC;gBACZ,MAAM;YACR,CAAC;QACH,CAAC;QACD,iFAAiF;QACjF,IAAI,IAAI,IAAI,MAAM,CAAC,EAAE,CAAC;YAAE,SAAS;QACjC,+DAA+D;QAC/D,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClB,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,gBAAgB,IAAI,QAAQ,CAAC,eAAe,CAAC,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AACtK,CAAC"}
@@ -0,0 +1,50 @@
1
+ export declare const MASTER_KEY_ACCOUNT = "com.apple.WebKit.WebCrypto.master+org.webkit.Playwright";
2
+ export declare const MASTER_KEY_LABEL = "Playwright WebCrypto Master Key";
3
+ /** The item and the build last proven to trust each other, so a run reads every item's ACL (~3 s) only when one changed. */
4
+ export interface WebkitTrustStamp {
5
+ created: string;
6
+ cdhash: string;
7
+ }
8
+ /** What `trustWebkit` reads and changes, so a spec can stand in for the keychain. */
9
+ export interface KeychainIO {
10
+ /** The item's attributes from `security find-generic-password`, or null when there is none. */
11
+ item(): Promise<string | null>;
12
+ /** `security dump-keychain -a`: every item's attributes and access list, no secrets. */
13
+ access(): Promise<string>;
14
+ remove(): Promise<void>;
15
+ /** The cdhash of the WebKit build about to launch, or null when it is not installed. */
16
+ cdhash(): Promise<string | null>;
17
+ readStamp(): WebkitTrustStamp | null;
18
+ writeStamp(stamp: WebkitTrustStamp): void;
19
+ }
20
+ /** `absent`: no item, WebKit makes one. `trusted`: this build's. `removed`: another build's, deleted. */
21
+ export type WebkitTrust = 'absent' | 'trusted' | 'removed' | 'uninstalled';
22
+ /** When the item was made, from its `cdat` attribute: `"cdat"<timedate>=0x… "20261103235742Z\000"`. */
23
+ export declare function keychainItemCreated(item: string | null): string | null;
24
+ /** The cdhashes the master key's partition list names, from a `security dump-keychain -a` listing. */
25
+ export declare function masterKeyPartition(dump: string): string[];
26
+ /**
27
+ * Leaves the master key only if this build made it: kept when this build's cdhash is in its partition list, deleted
28
+ * otherwise, so WebKit makes a fresh one it trusts instead of asking for the keychain's password.
29
+ */
30
+ export declare function trustWebkit(io: KeychainIO): Promise<WebkitTrust>;
31
+ /** This Mac's login keychain, and the WebKit build whose `Playwright.app` is at `app`. */
32
+ export declare function machineKeychain(app: string, stamp?: string | null): KeychainIO;
33
+ /** The part of Playwright's `BrowserType` this needs — the caller hands in its own `webkit`, so its version decides the build. */
34
+ export interface WebkitType<B, O> {
35
+ executablePath(): string;
36
+ launch(options?: O): Promise<B>;
37
+ }
38
+ /**
39
+ * Makes the keychain safe for the WebKit at `executablePath` without launching it — for a Playwright Test config's
40
+ * `globalSetup`, where the runner launches the browser itself. A no-op off macOS.
41
+ */
42
+ export declare function readyWebkitKeychain(executablePath: string): Promise<WebkitTrust | 'not-mac'>;
43
+ /** Playwright's WebKit, launched with no keychain dialog to wait on: `launchWebkit(webkit, { … })`. */
44
+ export declare function launchWebkit<B, O>(engine: WebkitType<B, O>, options?: O): Promise<B>;
45
+ /** {@link launchWebkit} for a profile kept on disk: `launchPersistentWebkit(webkit, dir, { … })`. */
46
+ export declare function launchPersistentWebkit<C, O>(engine: {
47
+ executablePath(): string;
48
+ launchPersistentContext(userDataDir: string, options?: O): Promise<C>;
49
+ }, userDataDir: string, options?: O): Promise<C>;
50
+ //# sourceMappingURL=webkitKeychain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webkitKeychain.d.ts","sourceRoot":"","sources":["../../src/testing/webkitKeychain.ts"],"names":[],"mappings":"AA8BA,eAAO,MAAM,kBAAkB,4DAA4D,CAAC;AAC5F,eAAO,MAAM,gBAAgB,oCAAoC,CAAC;AAElE,4HAA4H;AAC5H,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qFAAqF;AACrF,MAAM,WAAW,UAAU;IACzB,+FAA+F;IAC/F,IAAI,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC/B,wFAAwF;IACxF,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1B,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,wFAAwF;IACxF,MAAM,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACjC,SAAS,IAAI,gBAAgB,GAAG,IAAI,CAAC;IACrC,UAAU,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAC3C;AAED,yGAAyG;AACzG,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,CAAC;AAE3E,uGAAuG;AACvG,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAEtE;AAED,sGAAsG;AACtG,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAKzD;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAatE;AAsBD,0FAA0F;AAC1F,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,GAAG,IAAkB,GAAG,UAAU,CAyB3F;AAED,kIAAkI;AAClI,MAAM,WAAW,UAAU,CAAC,CAAC,EAAE,CAAC;IAC9B,cAAc,IAAI,MAAM,CAAC;IACzB,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACjC;AAKD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAU5F;AAED,uGAAuG;AACvG,wBAAsB,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAG1F;AAED,qGAAqG;AACrG,wBAAsB,sBAAsB,CAAC,CAAC,EAAE,CAAC,EAC/C,MAAM,EAAE;IAAE,cAAc,IAAI,MAAM,CAAC;IAAC,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;CAAE,EAC3G,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,CAAC,GACV,OAAO,CAAC,CAAC,CAAC,CAGZ"}
@@ -0,0 +1,139 @@
1
+ /// <reference types="node" />
2
+ /**
3
+ * The one way a spec launches Playwright's WebKit: `launchWebkit(webkit)` first drops a keychain item another WebKit
4
+ * build made, so WebKit makes its own and no password dialog waits on the owner's screen.
5
+ *
6
+ * WebKit keeps a CryptoKey in IndexedDB sealed with a master key in the login keychain: a generic password labeled
7
+ * "Playwright WebCrypto Master Key", account `com.apple.WebKit.WebCrypto.master+org.webkit.Playwright`, no service.
8
+ * vault's key store, collections' media keys and the master lock all keep a CryptoKey that way. The build that makes
9
+ * the item trusts only itself, by cdhash in its ACL and partition list (`cdhash:<40 hex>`), because Playwright's
10
+ * builds are signed ad hoc. Every other build is a stranger, and macOS asks for the login password and waits.
11
+ * 🔴 On 2026-11-03 that dialog stopped vault's Apple pass for its whole 240 s timeout, and minutes later
12
+ * collections' auto-deploy lost its WebKit mid-film (forge task 4347): webkit-2370 met an item webkit-2336 made.
13
+ *
14
+ * What does not work, tried that day: `security add-generic-password -A` opens the item to any app, but its
15
+ * partition is `apple-tool:`, not the build's cdhash, and WebKit still waits on a dialog. Adding a cdhash to the
16
+ * partition list needs the keychain's password. Deleting the item needs none, and the next WebKit makes a new one,
17
+ * trusted, without asking. All the item seals is a CryptoKey in a test browser's storage, which no run keeps.
18
+ *
19
+ * ⚠ The item is shared by every Playwright on this Mac, across workspaces. Deleting one another build made while that
20
+ * build is mid-test can make its next unwrap fail — a flaky test there, which is the better failure than a dialog
21
+ * nobody answers. It happens only the first time a build meets another's item.
22
+ *
23
+ * Never read the secret: `find-generic-password` without `-w`/`-g` prints attributes and never prompts, and
24
+ * `dump-keychain -a` lists every item's access without its data. `tools/check-test-spawn.ts` refuses a WebKit
25
+ * launch anywhere else.
26
+ */
27
+ import { execFile } from 'node:child_process';
28
+ import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
29
+ import { dirname, join } from 'node:path';
30
+ export const MASTER_KEY_ACCOUNT = 'com.apple.WebKit.WebCrypto.master+org.webkit.Playwright';
31
+ export const MASTER_KEY_LABEL = 'Playwright WebCrypto Master Key';
32
+ /** When the item was made, from its `cdat` attribute: `"cdat"<timedate>=0x… "20261103235742Z\000"`. */
33
+ export function keychainItemCreated(item) {
34
+ return item?.match(/"cdat"<timedate>=\S+\s+"(\d{14}Z)/)?.[1] ?? null;
35
+ }
36
+ /** The cdhashes the master key's partition list names, from a `security dump-keychain -a` listing. */
37
+ export function masterKeyPartition(dump) {
38
+ const block = dump.split(/^keychain: /m).find((entry) => entry.includes(`"acct"<blob>="${MASTER_KEY_ACCOUNT}"`));
39
+ const partition = block?.match(/authorizations \(\d+\): partition_id\n(?:\s+don't-require-password\n)?\s+description: ([^\n]*)/)?.[1] ?? '';
40
+ return [...partition.matchAll(/cdhash:([0-9a-f]{40})/g)].map((m) => m[1]);
41
+ }
42
+ /**
43
+ * Leaves the master key only if this build made it: kept when this build's cdhash is in its partition list, deleted
44
+ * otherwise, so WebKit makes a fresh one it trusts instead of asking for the keychain's password.
45
+ */
46
+ export async function trustWebkit(io) {
47
+ const created = keychainItemCreated(await io.item());
48
+ if (!created)
49
+ return 'absent';
50
+ const cdhash = await io.cdhash();
51
+ if (!cdhash)
52
+ return 'uninstalled';
53
+ const stamp = io.readStamp();
54
+ if (stamp?.created === created && stamp.cdhash === cdhash)
55
+ return 'trusted';
56
+ if (masterKeyPartition(await io.access()).includes(cdhash)) {
57
+ io.writeStamp({ created, cdhash });
58
+ return 'trusted';
59
+ }
60
+ await io.remove();
61
+ return 'removed';
62
+ }
63
+ /**
64
+ * A child's stdout, stderr and exit — async, because a sync spawn can hang a `bun test --parallel` worker, and through
65
+ * `node:child_process` because Playwright Test runs its config's `globalSetup` and its specs under Node.
66
+ */
67
+ function run(argv) {
68
+ const [cmd, ...args] = argv;
69
+ return new Promise((done) => {
70
+ execFile(cmd, args, { encoding: 'utf8', maxBuffer: 64 * 1024 * 1024 }, (error, out, err) => {
71
+ const code = error ? (typeof error.code === 'number' ? error.code : 1) : 0;
72
+ done({ out: String(out ?? ''), err: String(err ?? ''), code });
73
+ });
74
+ });
75
+ }
76
+ /** Where the stamp rests: the generation's state root when a gate runs under it, else nowhere (every launch reads the ACLs). */
77
+ function stampPath() {
78
+ const state = process.env.FORGE_STATE;
79
+ return state ? join(state, 'cache', 'webkit-keychain.json') : null;
80
+ }
81
+ /** This Mac's login keychain, and the WebKit build whose `Playwright.app` is at `app`. */
82
+ export function machineKeychain(app, stamp = stampPath()) {
83
+ const item = ['-a', MASTER_KEY_ACCOUNT, '-l', MASTER_KEY_LABEL];
84
+ return {
85
+ item: async () => {
86
+ const found = await run(['security', 'find-generic-password', ...item]);
87
+ return found.code === 0 ? found.out : null;
88
+ },
89
+ access: async () => (await run(['security', 'dump-keychain', '-a'])).out,
90
+ // Another worker may have deleted it first; either way it is gone.
91
+ remove: async () => void (await run(['security', 'delete-generic-password', ...item])),
92
+ cdhash: async () => (await run(['codesign', '-dv', '--verbose=4', app])).err.match(/^CDHash=([0-9a-f]{40})$/m)?.[1] ?? null,
93
+ readStamp: () => {
94
+ if (!stamp)
95
+ return null;
96
+ try {
97
+ return JSON.parse(readFileSync(stamp, 'utf8'));
98
+ }
99
+ catch {
100
+ return null;
101
+ }
102
+ },
103
+ writeStamp: (next) => {
104
+ if (!stamp)
105
+ return;
106
+ mkdirSync(dirname(stamp), { recursive: true });
107
+ writeFileSync(stamp, `${JSON.stringify(next)}\n`);
108
+ },
109
+ };
110
+ }
111
+ /** One check per build per process: a file that launches three WebKits asks the keychain once. */
112
+ const checked = new Map();
113
+ /**
114
+ * Makes the keychain safe for the WebKit at `executablePath` without launching it — for a Playwright Test config's
115
+ * `globalSetup`, where the runner launches the browser itself. A no-op off macOS.
116
+ */
117
+ export function readyWebkitKeychain(executablePath) {
118
+ if (process.platform !== 'darwin')
119
+ return Promise.resolve('not-mac');
120
+ // The build's `pw_run.sh` sits beside its `Playwright.app`.
121
+ const app = join(dirname(executablePath), 'Playwright.app');
122
+ let pending = checked.get(app);
123
+ if (!pending) {
124
+ pending = trustWebkit(machineKeychain(app));
125
+ checked.set(app, pending);
126
+ }
127
+ return pending;
128
+ }
129
+ /** Playwright's WebKit, launched with no keychain dialog to wait on: `launchWebkit(webkit, { … })`. */
130
+ export async function launchWebkit(engine, options) {
131
+ await readyWebkitKeychain(engine.executablePath());
132
+ return engine.launch(options);
133
+ }
134
+ /** {@link launchWebkit} for a profile kept on disk: `launchPersistentWebkit(webkit, dir, { … })`. */
135
+ export async function launchPersistentWebkit(engine, userDataDir, options) {
136
+ await readyWebkitKeychain(engine.executablePath());
137
+ return engine.launchPersistentContext(userDataDir, options);
138
+ }
139
+ //# sourceMappingURL=webkitKeychain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webkitKeychain.js","sourceRoot":"","sources":["../../src/testing/webkitKeychain.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cursedbelt",
3
- "version": "5.111.0",
3
+ "version": "5.112.0",
4
4
  "license": "ISC",
5
5
  "type": "module",
6
6
  "description": "The React design system of the cursedbelt split — components, styles, theme. cursedbelt-core below it; server tier in cursedbelt-server.",
@@ -941,7 +941,7 @@
941
941
  "@happy-dom/global-registrator": "^20.10.6",
942
942
  "@hookform/resolvers": "^5.4.0",
943
943
  "@lezer/highlight": "^1.2.3",
944
- "@playwright/test": "1.62.1",
944
+ "@playwright/test": "1.64.1",
945
945
  "@tailwindcss/node": "^4.3.1",
946
946
  "@tailwindcss/oxide": "^4.3.1",
947
947
  "@tailwindcss/vite": "^4.3.1",
@@ -40,3 +40,6 @@ export { type SafariResult, type SafariScreen, SafariSession, type WalkSafariOpt
40
40
  export { explainSafari, findGaps, judgeSupport, type StyleClaims, type StyleGaps, styleClaims } from './safariRules.js';
41
41
  // An app's pre-paint look script held to the look store and its initLook() (forge task 2916).
42
42
  export { type LookPrePaint, lookPrePaintProblems, readBootLookFallback, readLookPrePaint } from './lookPrePaint.js';
43
+ // The one way a spec launches WebKit: a keychain master key another WebKit build made is dropped first, so no
44
+ // password dialog waits on the owner's screen (forge task 4347). `tools/check-test-spawn.ts` refuses any other launch.
45
+ export { launchPersistentWebkit, launchWebkit, readyWebkitKeychain } from './webkitKeychain.js';
@@ -266,10 +266,13 @@ export function measurePhone(selectors: MeasurePhoneArgs): PhoneSnapshot {
266
266
  for (const el of outer) {
267
267
  const box = el.getBoundingClientRect();
268
268
  // Only what is on screen can be hit, or hit-tested: the rest is judged when a scroll brings it here.
269
+ // On screen is [left, right) × [top, bottom), as hit-testing owns a box: a middle ON the clip's bottom
270
+ // edge is the next box's point — station's Uploads "Open" at 582–626 in a pane ending at 604 hit the
271
+ // static tab bar there once webkit-2370 laid the bar at 604 exactly, and read as under it (forge task 4321).
269
272
  const view = clips(el);
270
273
  const mx = box.left + box.width / 2;
271
274
  const my = box.top + box.height / 2;
272
- if (mx < Math.max(0, view.left) || mx > Math.min(W, view.right) || my < Math.max(0, view.top) || my > Math.min(H, view.bottom)) continue;
275
+ if (mx < Math.max(0, view.left) || mx >= Math.min(W, view.right) || my < Math.max(0, view.top) || my >= Math.min(H, view.bottom)) continue;
273
276
  // At the edge of its pane its reach is cut by the edge: its size is judged on a screen where it has room.
274
277
  const room = 12;
275
278
  const got = reachOf(el, box);
@@ -0,0 +1,107 @@
1
+ import { describe, expect, test } from 'bun:test';
2
+ import {
3
+ type KeychainIO,
4
+ keychainItemCreated,
5
+ MASTER_KEY_ACCOUNT,
6
+ MASTER_KEY_LABEL,
7
+ masterKeyPartition,
8
+ trustWebkit,
9
+ type WebkitTrustStamp,
10
+ } from './webkitKeychain.js';
11
+
12
+ const MINE = '12b32aac7359474efaa206a6af9f2ba193cab5d3';
13
+ const OTHER = 'ee375e464add52192e5818bebd95c8c5d7742153';
14
+ const CREATED = '20261103235742Z';
15
+
16
+ /** `security find-generic-password` without `-w`, as this Mac printed it on 2026-11-03. */
17
+ const item = (created = CREATED) => `keychain: "/login.keychain-db"
18
+ class: "genp"
19
+ attributes:
20
+ 0x00000007 <blob>="${MASTER_KEY_LABEL}"
21
+ "acct"<blob>="${MASTER_KEY_ACCOUNT}"
22
+ "cdat"<timedate>=0x32303236313130333233353734325A00 "${created}\\000"
23
+ "svce"<blob>=<NULL>
24
+ `;
25
+
26
+ /** One item's block of `security dump-keychain -a`, with its partition list naming `cdhash`. */
27
+ const entry = (account: string, cdhash: string) => `keychain: "/login.keychain-db"
28
+ class: "genp"
29
+ attributes:
30
+ "acct"<blob>="${account}"
31
+ access: 5 entries
32
+ entry 0:
33
+ authorizations (6): decrypt derive export_clear export_wrapped mac sign
34
+ don't-require-password
35
+ description: ${MASTER_KEY_LABEL}
36
+ applications (1):
37
+ 0: /ms-playwright/webkit-2370/Playwright.app (OK)
38
+ requirement: cdhash H"${cdhash}"
39
+ entry 3:
40
+ authorizations (1): partition_id
41
+ don't-require-password
42
+ description: cdhash:${cdhash}
43
+ applications: <null>
44
+ `;
45
+
46
+ /** A keychain in memory, recording what was asked of it. */
47
+ function keychain(over: Partial<{ item: string | null; dump: string; cdhash: string | null; stamp: WebkitTrustStamp | null }> = {}) {
48
+ const calls: string[] = [];
49
+ let stamp = over.stamp ?? null;
50
+ const io: KeychainIO = {
51
+ item: async () => (over.item === undefined ? item() : over.item),
52
+ access: async () => {
53
+ calls.push('access');
54
+ return over.dump ?? entry('lastKnownFaceTimeCallerID', OTHER) + entry(MASTER_KEY_ACCOUNT, MINE);
55
+ },
56
+ remove: async () => void calls.push('remove'),
57
+ cdhash: async () => (over.cdhash === undefined ? MINE : over.cdhash),
58
+ readStamp: () => stamp,
59
+ writeStamp: (next) => {
60
+ calls.push('stamp');
61
+ stamp = next;
62
+ },
63
+ };
64
+ return { io, calls, stamp: () => stamp };
65
+ }
66
+
67
+ describe('the WebKit master key', () => {
68
+ test('its creation time and partition are read from what `security` prints', () => {
69
+ expect(keychainItemCreated(item())).toBe(CREATED);
70
+ expect(keychainItemCreated(null)).toBeNull();
71
+ // Only the master key's own block counts: another item trusting a cdhash says nothing about it.
72
+ expect(masterKeyPartition(entry(MASTER_KEY_ACCOUNT, OTHER) + entry('another', MINE))).toEqual([OTHER]);
73
+ expect(masterKeyPartition(entry('another', MINE))).toEqual([]);
74
+ });
75
+
76
+ test('🔴 an item ANOTHER build made is deleted, so this one makes its own instead of a password dialog', async () => {
77
+ const k = keychain({ dump: entry(MASTER_KEY_ACCOUNT, OTHER) });
78
+ expect(await trustWebkit(k.io)).toBe('removed');
79
+ expect(k.calls).toEqual(['access', 'remove']);
80
+ expect(k.stamp()).toBeNull();
81
+ });
82
+
83
+ test('🔴 a stamp for another build, or for an older item, is not trust — the ACL is read again', async () => {
84
+ const k = keychain({ dump: entry(MASTER_KEY_ACCOUNT, OTHER), stamp: { created: CREATED, cdhash: OTHER } });
85
+ expect(await trustWebkit(k.io)).toBe('removed');
86
+ const older = keychain({ dump: entry(MASTER_KEY_ACCOUNT, OTHER), stamp: { created: '20261001000000Z', cdhash: MINE } });
87
+ expect(await trustWebkit(older.io)).toBe('removed');
88
+ });
89
+
90
+ test("this build's own item is kept and stamped, and the stamp spares the next run the ACL read", async () => {
91
+ const k = keychain();
92
+ expect(await trustWebkit(k.io)).toBe('trusted');
93
+ expect(k.calls).toEqual(['access', 'stamp']);
94
+ expect(k.stamp()).toEqual({ created: CREATED, cdhash: MINE });
95
+ const again = keychain({ stamp: { created: CREATED, cdhash: MINE } });
96
+ expect(await trustWebkit(again.io)).toBe('trusted');
97
+ expect(again.calls).toEqual([]);
98
+ });
99
+
100
+ test('no item is left to WebKit to make; an uninstalled build is not a reason to delete one', async () => {
101
+ const none = keychain({ item: null });
102
+ expect(await trustWebkit(none.io)).toBe('absent');
103
+ const uninstalled = keychain({ cdhash: null, dump: entry(MASTER_KEY_ACCOUNT, OTHER) });
104
+ expect(await trustWebkit(uninstalled.io)).toBe('uninstalled');
105
+ expect([...none.calls, ...uninstalled.calls]).toEqual([]);
106
+ });
107
+ });
@@ -0,0 +1,175 @@
1
+ /// <reference types="node" />
2
+ /**
3
+ * The one way a spec launches Playwright's WebKit: `launchWebkit(webkit)` first drops a keychain item another WebKit
4
+ * build made, so WebKit makes its own and no password dialog waits on the owner's screen.
5
+ *
6
+ * WebKit keeps a CryptoKey in IndexedDB sealed with a master key in the login keychain: a generic password labeled
7
+ * "Playwright WebCrypto Master Key", account `com.apple.WebKit.WebCrypto.master+org.webkit.Playwright`, no service.
8
+ * vault's key store, collections' media keys and the master lock all keep a CryptoKey that way. The build that makes
9
+ * the item trusts only itself, by cdhash in its ACL and partition list (`cdhash:<40 hex>`), because Playwright's
10
+ * builds are signed ad hoc. Every other build is a stranger, and macOS asks for the login password and waits.
11
+ * 🔴 On 2026-11-03 that dialog stopped vault's Apple pass for its whole 240 s timeout, and minutes later
12
+ * collections' auto-deploy lost its WebKit mid-film (forge task 4347): webkit-2370 met an item webkit-2336 made.
13
+ *
14
+ * What does not work, tried that day: `security add-generic-password -A` opens the item to any app, but its
15
+ * partition is `apple-tool:`, not the build's cdhash, and WebKit still waits on a dialog. Adding a cdhash to the
16
+ * partition list needs the keychain's password. Deleting the item needs none, and the next WebKit makes a new one,
17
+ * trusted, without asking. All the item seals is a CryptoKey in a test browser's storage, which no run keeps.
18
+ *
19
+ * ⚠ The item is shared by every Playwright on this Mac, across workspaces. Deleting one another build made while that
20
+ * build is mid-test can make its next unwrap fail — a flaky test there, which is the better failure than a dialog
21
+ * nobody answers. It happens only the first time a build meets another's item.
22
+ *
23
+ * Never read the secret: `find-generic-password` without `-w`/`-g` prints attributes and never prompts, and
24
+ * `dump-keychain -a` lists every item's access without its data. `tools/check-test-spawn.ts` refuses a WebKit
25
+ * launch anywhere else.
26
+ */
27
+ import { execFile } from 'node:child_process';
28
+ import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
29
+ import { dirname, join } from 'node:path';
30
+
31
+ export const MASTER_KEY_ACCOUNT = 'com.apple.WebKit.WebCrypto.master+org.webkit.Playwright';
32
+ export const MASTER_KEY_LABEL = 'Playwright WebCrypto Master Key';
33
+
34
+ /** The item and the build last proven to trust each other, so a run reads every item's ACL (~3 s) only when one changed. */
35
+ export interface WebkitTrustStamp {
36
+ created: string;
37
+ cdhash: string;
38
+ }
39
+
40
+ /** What `trustWebkit` reads and changes, so a spec can stand in for the keychain. */
41
+ export interface KeychainIO {
42
+ /** The item's attributes from `security find-generic-password`, or null when there is none. */
43
+ item(): Promise<string | null>;
44
+ /** `security dump-keychain -a`: every item's attributes and access list, no secrets. */
45
+ access(): Promise<string>;
46
+ remove(): Promise<void>;
47
+ /** The cdhash of the WebKit build about to launch, or null when it is not installed. */
48
+ cdhash(): Promise<string | null>;
49
+ readStamp(): WebkitTrustStamp | null;
50
+ writeStamp(stamp: WebkitTrustStamp): void;
51
+ }
52
+
53
+ /** `absent`: no item, WebKit makes one. `trusted`: this build's. `removed`: another build's, deleted. */
54
+ export type WebkitTrust = 'absent' | 'trusted' | 'removed' | 'uninstalled';
55
+
56
+ /** When the item was made, from its `cdat` attribute: `"cdat"<timedate>=0x… "20261103235742Z\000"`. */
57
+ export function keychainItemCreated(item: string | null): string | null {
58
+ return item?.match(/"cdat"<timedate>=\S+\s+"(\d{14}Z)/)?.[1] ?? null;
59
+ }
60
+
61
+ /** The cdhashes the master key's partition list names, from a `security dump-keychain -a` listing. */
62
+ export function masterKeyPartition(dump: string): string[] {
63
+ const block = dump.split(/^keychain: /m).find((entry) => entry.includes(`"acct"<blob>="${MASTER_KEY_ACCOUNT}"`));
64
+ const partition =
65
+ block?.match(/authorizations \(\d+\): partition_id\n(?:\s+don't-require-password\n)?\s+description: ([^\n]*)/)?.[1] ?? '';
66
+ return [...partition.matchAll(/cdhash:([0-9a-f]{40})/g)].map((m) => m[1] as string);
67
+ }
68
+
69
+ /**
70
+ * Leaves the master key only if this build made it: kept when this build's cdhash is in its partition list, deleted
71
+ * otherwise, so WebKit makes a fresh one it trusts instead of asking for the keychain's password.
72
+ */
73
+ export async function trustWebkit(io: KeychainIO): Promise<WebkitTrust> {
74
+ const created = keychainItemCreated(await io.item());
75
+ if (!created) return 'absent';
76
+ const cdhash = await io.cdhash();
77
+ if (!cdhash) return 'uninstalled';
78
+ const stamp = io.readStamp();
79
+ if (stamp?.created === created && stamp.cdhash === cdhash) return 'trusted';
80
+ if (masterKeyPartition(await io.access()).includes(cdhash)) {
81
+ io.writeStamp({ created, cdhash });
82
+ return 'trusted';
83
+ }
84
+ await io.remove();
85
+ return 'removed';
86
+ }
87
+
88
+ /**
89
+ * A child's stdout, stderr and exit — async, because a sync spawn can hang a `bun test --parallel` worker, and through
90
+ * `node:child_process` because Playwright Test runs its config's `globalSetup` and its specs under Node.
91
+ */
92
+ function run(argv: string[]): Promise<{ out: string; err: string; code: number }> {
93
+ const [cmd, ...args] = argv as [string, ...string[]];
94
+ return new Promise((done) => {
95
+ execFile(cmd, args, { encoding: 'utf8', maxBuffer: 64 * 1024 * 1024 }, (error, out, err) => {
96
+ const code = error ? (typeof error.code === 'number' ? error.code : 1) : 0;
97
+ done({ out: String(out ?? ''), err: String(err ?? ''), code });
98
+ });
99
+ });
100
+ }
101
+
102
+ /** Where the stamp rests: the generation's state root when a gate runs under it, else nowhere (every launch reads the ACLs). */
103
+ function stampPath(): string | null {
104
+ const state = process.env.FORGE_STATE;
105
+ return state ? join(state, 'cache', 'webkit-keychain.json') : null;
106
+ }
107
+
108
+ /** This Mac's login keychain, and the WebKit build whose `Playwright.app` is at `app`. */
109
+ export function machineKeychain(app: string, stamp: string | null = stampPath()): KeychainIO {
110
+ const item = ['-a', MASTER_KEY_ACCOUNT, '-l', MASTER_KEY_LABEL];
111
+ return {
112
+ item: async () => {
113
+ const found = await run(['security', 'find-generic-password', ...item]);
114
+ return found.code === 0 ? found.out : null;
115
+ },
116
+ access: async () => (await run(['security', 'dump-keychain', '-a'])).out,
117
+ // Another worker may have deleted it first; either way it is gone.
118
+ remove: async () => void (await run(['security', 'delete-generic-password', ...item])),
119
+ cdhash: async () => (await run(['codesign', '-dv', '--verbose=4', app])).err.match(/^CDHash=([0-9a-f]{40})$/m)?.[1] ?? null,
120
+ readStamp: () => {
121
+ if (!stamp) return null;
122
+ try {
123
+ return JSON.parse(readFileSync(stamp, 'utf8')) as WebkitTrustStamp;
124
+ } catch {
125
+ return null;
126
+ }
127
+ },
128
+ writeStamp: (next) => {
129
+ if (!stamp) return;
130
+ mkdirSync(dirname(stamp), { recursive: true });
131
+ writeFileSync(stamp, `${JSON.stringify(next)}\n`);
132
+ },
133
+ };
134
+ }
135
+
136
+ /** The part of Playwright's `BrowserType` this needs — the caller hands in its own `webkit`, so its version decides the build. */
137
+ export interface WebkitType<B, O> {
138
+ executablePath(): string;
139
+ launch(options?: O): Promise<B>;
140
+ }
141
+
142
+ /** One check per build per process: a file that launches three WebKits asks the keychain once. */
143
+ const checked = new Map<string, Promise<WebkitTrust>>();
144
+
145
+ /**
146
+ * Makes the keychain safe for the WebKit at `executablePath` without launching it — for a Playwright Test config's
147
+ * `globalSetup`, where the runner launches the browser itself. A no-op off macOS.
148
+ */
149
+ export function readyWebkitKeychain(executablePath: string): Promise<WebkitTrust | 'not-mac'> {
150
+ if (process.platform !== 'darwin') return Promise.resolve('not-mac');
151
+ // The build's `pw_run.sh` sits beside its `Playwright.app`.
152
+ const app = join(dirname(executablePath), 'Playwright.app');
153
+ let pending = checked.get(app);
154
+ if (!pending) {
155
+ pending = trustWebkit(machineKeychain(app));
156
+ checked.set(app, pending);
157
+ }
158
+ return pending;
159
+ }
160
+
161
+ /** Playwright's WebKit, launched with no keychain dialog to wait on: `launchWebkit(webkit, { … })`. */
162
+ export async function launchWebkit<B, O>(engine: WebkitType<B, O>, options?: O): Promise<B> {
163
+ await readyWebkitKeychain(engine.executablePath());
164
+ return engine.launch(options);
165
+ }
166
+
167
+ /** {@link launchWebkit} for a profile kept on disk: `launchPersistentWebkit(webkit, dir, { … })`. */
168
+ export async function launchPersistentWebkit<C, O>(
169
+ engine: { executablePath(): string; launchPersistentContext(userDataDir: string, options?: O): Promise<C> },
170
+ userDataDir: string,
171
+ options?: O,
172
+ ): Promise<C> {
173
+ await readyWebkitKeychain(engine.executablePath());
174
+ return engine.launchPersistentContext(userDataDir, options);
175
+ }