webloom-framework 0.4.0 → 0.4.1

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/transport/serviceBridge.ts","../src/transport/messagePortServiceTransport.ts","../src/transport/messagePortServiceProvider.ts","../src/runtime/peerView.ts","../src/runtime/connectSharedWorker.ts"],"names":["active"],"mappings":";;;AAyKA,SAAS,GAAG,MAAA,EAAwB;AAClC,EAAA,IAAI;AACF,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,OAAO,MAAA,CAAO,UAAA,KAAe,UAAA,EAAY,OAAO,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,MAAA,CAAO,YAAY,CAAA,CAAA;AAAA,EACvH,CAAA,CAAA,MAAQ;AAAA,EAAiB;AACzB,EAAA,OAAO,GAAG,MAAM,CAAA,CAAA,EAAI,KAAK,GAAA,EAAI,CAAE,SAAS,EAAE,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,QAAO,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AACpF;AAEA,SAAS,SAAA,CAAU,OAA2B,QAAA,EAA0B;AACtE,EAAA,MAAM,SAAS,KAAA,IAAS,QAAA;AACxB,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,IAAK,MAAA,GAAS,CAAA,IAAK,MAAA,GAAS,GAAA,EAAS,MAAM,IAAI,SAAA,CAAU,oDAAoD,CAAA;AACxI,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,gBAAgB,OAAA,EAAyF;AAChH,EAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,EAAA,MAAM,SAAS,OAAA,CAAQ,MAAA,CAAO,CAAC,MAAA,KAAkC,WAAW,MAAS,CAAA;AACrF,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,GAAA,CAAI,CAAC,MAAA,KAAW;AACvC,IAAA,MAAM,WAAW,MAAY;AAAE,MAAA,IAAI;AAAE,QAAA,UAAA,CAAW,KAAA,CAAM,OAAO,MAAM,CAAA;AAAA,MAAG,CAAA,CAAA,MAAQ;AAAE,QAAA,UAAA,CAAW,KAAA,EAAM;AAAA,MAAG;AAAA,IAAE,CAAA;AACtG,IAAA,IAAI,MAAA,CAAO,SAAS,QAAA,EAAS;AAAA,gBAAe,gBAAA,CAAiB,OAAA,EAAS,UAAU,EAAE,IAAA,EAAM,MAAM,CAAA;AAC9F,IAAA,OAAO,EAAE,QAAQ,QAAA,EAAS;AAAA,EAC5B,CAAC,CAAA;AACD,EAAA,OAAO,EAAE,MAAA,EAAQ,UAAA,CAAW,MAAA,EAAQ,OAAA,GAAU;AAAE,IAAA,KAAA,MAAW,QAAQ,SAAA,EAAW,IAAA,CAAK,OAAO,mBAAA,CAAoB,OAAA,EAAS,KAAK,QAAQ,CAAA;AAAA,EAAG,CAAA,EAAE;AAC3I;AAEA,SAAS,cAAA,CACP,IAAA,EACA,KAAA,EACA,OAAA,EACc;AACd,EAAA,MAAM,IAAA,GAA+B;AAAA,IACnC,iBAAA,EAAmB,0CAAA;AAAA,IACnB,sBAAA,EAAwB,2BAAA;AAAA,IACxB,yBAAA,EAA2B,sCAAA;AAAA,IAC3B,0BAAA,EAA4B,uCAAA;AAAA,IAC5B,oBAAA,EAAsB,2CAAA;AAAA,IACtB,qBAAA,EAAuB,4CAAA;AAAA,IACvB,gBAAA,EAAkB,4CAAA;AAAA,IAClB,cAAA,EAAgB,oCAAA;AAAA,IAChB,YAAA,EAAc,0DAAA;AAAA,IACd,iBAAA,EAAmB,+BAAA;AAAA,IACnB,eAAA,EAAiB,iCAAA;AAAA,IACjB,aAAA,EAAe,8BAAA;AAAA,IACf,qBAAA,EAAuB,kCAAA;AAAA,IACvB,eAAA,EAAiB,sCAAA;AAAA,IACjB,uBAAA,EAAyB,iCAAA;AAAA,IACzB,gBAAA,EAAkB,0BAAA;AAAA,IAClB,eAAA,EAAiB;AAAA,GACnB;AACA,EAAA,OAAO,IAAI,YAAA,CAAa,IAAA,EAAM,IAAA,CAAK,MAAA,CAAO,IAAI,CAAC,CAAA,IAAK,0BAAA,EAA4B,KAAA,EAAO,OAAO,CAAA;AAChG;AAEA,SAAS,cAAc,OAAA,EAAoD;AACzE,EAAA,OAAO,cAAA,CAAe,OAAA,CAAQ,KAAA,CAAM,IAAA,EAAM,OAAA,CAAQ,KAAA,CAAM,KAAA,EAAO,EAAE,iBAAA,EAAmB,OAAA,CAAQ,iBAAA,EAAmB,CAAA;AACjH;AAEA,SAAS,WAAA,CAAY,OAAe,OAAA,EAA0B;AAC5D,EAAA,OAAO,OAAO,aAAA,CAAc,KAAK,CAAA,IAAK,KAAA,IAAS,KAAK,KAAA,IAAS,OAAA;AAC/D;AAEA,SAAS,cAAA,CAAe,WAA6B,UAAA,EAAuC;AAC1F,EAAA,OAAO,SAAA,CAAU,IAAA,KAAS,UAAA,CAAW,IAAA,IAAQ,SAAA,CAAU,iBAAiB,UAAA,CAAW,EAAA,IAAM,SAAA,CAAU,eAAA,KAAoB,UAAA,CAAW,OAAA;AACpI;AAEA,SAAS,WAAW,OAAA,EAAsF;AACxG,EAAA,OAAO,CAAA,EAAG,QAAQ,IAAI,CAAA,EAAA,EAAS,QAAQ,YAAY,CAAA,EAAA,EAAS,QAAQ,eAAe,CAAA,CAAA;AACrF;AAEA,SAAS,UAAA,CAAW,YAA8B,SAAA,EAA6E;AAC7H,EAAA,OAAO,EAAE,YAAA,EAAc,UAAA,CAAW,EAAA,EAAI,GAAI,SAAA,GAAY,EAAE,iBAAA,EAAmB,SAAA,CAAU,iBAAA,EAAkB,GAAI,EAAC,EAAG;AACjH;AAGO,SAAS,uBAAuB,OAAA,EAIrC;AACA,EAAA,MAAM,QAAQ,yBAAA,EAA0B;AACxC,EAAA,MAAM,MAAA,GAAS,sBAAA,CAAuB,OAAA,CAAQ,MAAM,CAAA;AACpD,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAA,IAAU,mBAAA,CAAoB,MAAM,CAAA;AAC3D,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAgB;AACtC,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAqB;AACzC,EAAA,MAAM,OAAA,uBAAc,GAAA,EAA2B;AAC/C,EAAA,MAAM,YAAA,uBAAmB,GAAA,EAAuB;AAChD,EAAA,MAAM,kBAAA,uBAAyB,GAAA,EAA6B;AAC5D,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAyB;AAC7C,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAgD;AACpE,EAAA,IAAI,YAAA,GAAe,CAAA;AACnB,EAAA,IAAI,wBAAA,GAA2B,CAAA;AAC/B,EAAA,IAAI,YAAA,GAA0C,OAAA;AAC9C,EAAA,IAAI,eAAA;AACJ,EAAA,IAAI,eAAA;AACJ,EAAA,IAAI,iBAAA;AACJ,EAAA,IAAI,uBAAA;AACJ,EAAA,IAAI,QAAA,GAAW,EAAA;AACf,EAAA,IAAI,0BAAA;AACJ,EAAA,IAAI,kBAA+C,EAAC;AACpD,EAAA,IAAI,QAAA,GAAW,KAAA;AACf,EAAA,IAAI,mBAAA,GAAsB,CAAA;AAC1B,EAAA,MAAM,cAAA,GAAiB,SAAA,CAAU,OAAA,CAAQ,oBAAA,EAAsB,GAAM,CAAA;AAErE,EAAA,MAAM,OAAO,MAAY;AACvB,IAAA,KAAA,MAAW,QAAA,IAAY,CAAC,GAAG,SAAS,CAAA,EAAG;AAAE,MAAA,IAAI;AAAE,QAAA,QAAA,EAAS;AAAA,MAAG,CAAA,CAAA,MAAQ;AAAA,MAA2B;AAAA,IAAE;AAAA,EAClG,CAAA;AAEA,EAAA,MAAM,OAAA,GAAU,CAAC,YAAA,EAAsB,MAAA,KAAqD;AAC1F,IAAA,IAAI,YAAA,IAAgB,MAAA,CAAO,sBAAA,IAA0B,MAAA,CAAO,YAAA,IAAgB,OAAO,yBAAA,EAA2B,OAAO,cAAA,CAAe,yBAAA,EAA2B,UAAU,CAAA;AACzK,IAAA,IAAI,MAAA,KAAW,mBAAA,IAAuB,MAAA,CAAO,uBAAA,IAA2B,MAAA,CAAO,aAAA,IAAiB,MAAA,CAAO,0BAAA,CAAA,EAA6B,OAAO,cAAA,CAAe,yBAAA,EAA2B,UAAU,CAAA;AAC/L,IAAA,IAAI,YAAA,GAAe,MAAA,CAAO,qBAAA,IACrB,wBAAA,GAA2B,OAAO,8BAAA,GAAiC,YAAA,IACnE,MAAA,CAAO,oBAAA,GAAuB,OAAO,iCAAA,GAAoC,YAAA,EAAc,OAAO,cAAA,CAAe,2BAA2B,UAAU,CAAA;AACvJ,IAAA,MAAA,CAAO,YAAA,IAAgB,CAAA;AACvB,IAAA,IAAI,MAAA,SAAe,aAAA,IAAiB,CAAA;AACpC,IAAA,wBAAA,IAA4B,YAAA;AAC5B,IAAA,MAAA,CAAO,oBAAA,IAAwB,YAAA;AAC/B,IAAA,YAAA,IAAgB,CAAA;AAChB,IAAA,IAAI,QAAQ,mBAAA,IAAuB,CAAA;AACnC,IAAA,OAAO,EAAE,YAAA,EAAc,eAAA,EAAiB,MAAM,cAAA,EAAgB,MAAA,EAAQ,iBAAiB,IAAA,EAAK;AAAA,EAC9F,CAAA;AAEA,EAAA,MAAM,yBAAA,GAA4B,CAAC,WAAA,KAAwC;AACzE,IAAA,IAAI,CAAC,YAAY,eAAA,EAAiB;AAClC,IAAA,WAAA,CAAY,eAAA,GAAkB,KAAA;AAC9B,IAAA,YAAA,GAAe,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,YAAA,GAAe,CAAC,CAAA;AAC3C,IAAA,MAAA,CAAO,eAAe,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,MAAA,CAAO,eAAe,CAAC,CAAA;AAAA,EAC3D,CAAA;AAEA,EAAA,MAAM,wBAAA,GAA2B,CAAC,WAAA,KAAwC;AACxE,IAAA,IAAI,CAAC,YAAY,cAAA,EAAgB;AACjC,IAAA,WAAA,CAAY,cAAA,GAAiB,KAAA;AAC7B,IAAA,mBAAA,GAAsB,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,mBAAA,GAAsB,CAAC,CAAA;AACzD,IAAA,MAAA,CAAO,gBAAgB,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,MAAA,CAAO,gBAAgB,CAAC,CAAA;AAAA,EAC7D,CAAA;AAEA,EAAA,MAAM,yBAAA,GAA4B,CAAC,WAAA,KAAwC;AACzE,IAAA,IAAI,CAAC,YAAY,eAAA,EAAiB;AAClC,IAAA,WAAA,CAAY,eAAA,GAAkB,KAAA;AAC9B,IAAA,wBAAA,GAA2B,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,wBAAA,GAA2B,YAAY,YAAY,CAAA;AAC1F,IAAA,MAAA,CAAO,uBAAuB,IAAA,CAAK,GAAA,CAAI,GAAG,MAAA,CAAO,oBAAA,GAAuB,YAAY,YAAY,CAAA;AAAA,EAClG,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqB,CAAC,WAAA,KAAwC;AAClE,IAAA,yBAAA,CAA0B,WAAW,CAAA;AACrC,IAAA,wBAAA,CAAyB,WAAW,CAAA;AACpC,IAAA,yBAAA,CAA0B,WAAW,CAAA;AAAA,EACvC,CAAA;AAEA,EAAA,MAAM,wBAAA,GAA2B,CAAC,MAAA,KAA0C;AAC1E,IAAA,IAAI,OAAO,QAAA,EAAU;AACrB,IAAA,MAAA,CAAO,QAAA,GAAW,IAAA;AAClB,IAAA,kBAAA,CAAmB,OAAO,MAAM,CAAA;AAChC,IAAA,wBAAA,GAA2B,KAAK,GAAA,CAAI,CAAA,EAAG,wBAAA,GAA2B,MAAA,CAAO,KAAK,WAAW,CAAA;AACzF,IAAA,MAAA,CAAO,oBAAA,GAAuB,KAAK,GAAA,CAAI,CAAA,EAAG,OAAO,oBAAA,GAAuB,MAAA,CAAO,KAAK,WAAW,CAAA;AAC/F,IAAA,MAAA,CAAO,oBAAA,EAAqB;AAC5B,IAAA,IAAA,EAAK;AAAA,EACP,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,IAAA,KAA0B;AAClD,IAAA,IAAA,CAAK,OAAO,gBAAA,EAAiB;AAC7B,IAAA,wBAAA,GAA2B,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,wBAAA,GAA2B,KAAK,WAAW,CAAA;AAClF,IAAA,MAAA,CAAO,uBAAuB,IAAA,CAAK,GAAA,CAAI,GAAG,MAAA,CAAO,oBAAA,GAAuB,KAAK,WAAW,CAAA;AAAA,EAC1F,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,KAAA,EAAqB,KAAA,EAAiB,KAAA,KAA0B;AACnF,IAAA,IAAI,MAAM,OAAA,EAAS;AACnB,IAAA,KAAA,CAAM,OAAA,GAAU,IAAA;AAChB,IAAA,IAAI,KAAA,CAAM,KAAA,KAAU,MAAA,EAAW,YAAA,CAAa,MAAM,KAAK,CAAA;AACvD,IAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,MAAM,CAAA;AAC3B,IAAA,kBAAA,CAAmB,MAAM,WAAW,CAAA;AACpC,IAAA,KAAA,CAAM,OAAA,IAAU;AAChB,IAAA,IAAI,KAAA,KAAU,MAAA,EAAW,KAAA,CAAM,MAAA,CAAO,KAAK,CAAA;AAAA,SAAQ,KAAA,CAAM,QAAQ,KAAK,CAAA;AACtE,IAAA,IAAA,EAAK;AAAA,EACP,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CAAC,KAAA,KAA6B;AAC/C,IAAA,IAAI,MAAM,UAAA,EAAY;AACtB,IAAA,KAAA,CAAM,UAAA,GAAa,IAAA;AACnB,IAAA,IAAI;AACF,MAAA,OAAA,CAAQ,SAAA,CAAU,IAAA,CAAK,EAAE,IAAA,EAAM,qBAAqB,eAAA,EAAiB,wBAAA,EAA0B,MAAA,EAAQ,KAAA,CAAM,MAAA,EAAQ,iBAAA,EAAmB,KAAA,CAAM,SAAA,CAAU,mBAAmB,CAAA;AAAA,IAC7K,CAAA,CAAA,MAAQ;AAAA,IAA0C;AAClD,IAAA,IAAI;AAAE,MAAA,KAAA,CAAM,WAAW,KAAA,EAAM;AAAA,IAAG,CAAA,CAAA,MAAQ;AAAA,IAAa;AAAA,EACvD,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,CAAC,MAAA,EAAuB,KAAA,KAAyB;AACzE,IAAA,IAAI,OAAO,YAAA,EAAc;AACzB,IAAA,MAAA,CAAO,YAAA,GAAe,IAAA;AACtB,IAAA,MAAA,CAAO,YAAY,KAAK,CAAA;AAAA,EAC1B,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqB,CAAC,MAAA,EAAuB,KAAA,KAAyB;AAC1E,IAAA,IAAI,OAAO,aAAA,EAAe;AAC1B,IAAA,MAAA,CAAO,aAAA,GAAgB,IAAA;AACvB,IAAA,MAAA,CAAO,aAAa,KAAK,CAAA;AAAA,EAC3B,CAAA;AAEA,EAAA,MAAM,mBAAA,GAAsB,CAAC,MAAA,KAAgC;AAC3D,IAAA,IAAI,OAAO,aAAA,EAAe;AAC1B,IAAA,MAAA,CAAO,aAAA,GAAgB,IAAA;AACvB,IAAA,MAAA,CAAO,aAAA,EAAc;AAAA,EACvB,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,MAAA,KAAgC;AACpD,IAAA,IAAI,CAAC,OAAO,aAAA,IAAiB,MAAA,CAAO,cAAc,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA,EAAG;AAC3E,IAAA,OAAA,CAAQ,MAAA,CAAO,OAAO,MAAM,CAAA;AAAA,EAC9B,CAAA;AAEA,EAAA,MAAM,cAAA,GAAiB,CAAC,MAAA,KAAgC;AACtD,IAAA,IAAI,CAAC,MAAA,CAAO,YAAA,IAAgB,MAAA,CAAO,UAAA,IAAc,OAAO,KAAA,CAAM,MAAA,GAAS,CAAA,IAAK,MAAA,CAAO,aAAA,EAAe;AAClG,IAAA,MAAA,CAAO,KAAA,GAAQ,QAAA;AACf,IAAA,mBAAA,CAAoB,MAAM,CAAA;AAC1B,IAAA,YAAA,CAAa,MAAM,CAAA;AACnB,IAAA,IAAA,EAAK;AAAA,EACP,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkB,CAAC,MAAA,EAAuB,KAAA,EAAqB,YAAA,KAAgC;AACnG,IAAA,IAAI,MAAA,CAAO,KAAA,KAAU,QAAA,IAAY,MAAA,CAAO,UAAU,QAAA,EAAU;AAC5D,IAAA,MAAA,CAAO,KAAA,GAAQ,QAAA;AACf,IAAA,IAAI,MAAA,CAAO,KAAA,KAAU,MAAA,EAAW,YAAA,CAAa,OAAO,KAAK,CAAA;AACzD,IAAA,OAAA,CAAQ,MAAA,CAAO,OAAO,MAAM,CAAA;AAC5B,IAAA,MAAA,CAAO,qBAAA,IAAwB;AAC/B,IAAA,MAAA,CAAO,qBAAA,GAAwB,MAAA;AAC/B,IAAA,kBAAA,CAAmB,OAAO,WAAW,CAAA;AAGrC,IAAA,IAAI;AAAE,MAAA,MAAA,CAAO,UAAA,CAAW,MAAM,KAAK,CAAA;AAAA,IAAG,CAAA,CAAA,MAAQ;AAAA,IAAwB;AACtE,IAAA,KAAA,MAAW,QAAQ,MAAA,CAAO,KAAA,CAAM,OAAO,CAAC,CAAA,mBAAoB,IAAI,CAAA;AAChE,IAAA,IAAI,CAAC,MAAA,CAAO,YAAA,EAAc,iBAAA,CAAkB,QAAQ,KAAK,CAAA;AACzD,IAAA,kBAAA,CAAmB,QAAQ,KAAK,CAAA;AAChC,IAAA,MAAA,CAAO,OAAA,IAAU;AACjB,IAAA,IAAI,YAAA,aAAyB,MAAM,CAAA;AACnC,IAAA,YAAA,CAAa,MAAM,CAAA;AACnB,IAAA,IAAA,EAAK;AAAA,EACP,CAAA;AAEA,EAAA,MAAM,sBAAA,GAAyB,CAAC,KAAA,EAAqB,UAAA,EAA8B,SAAA,KACjF,IAAI,YAAA,CAAa,KAAA,CAAM,IAAA,EAAM,KAAA,CAAM,OAAA,EAAS,KAAA,CAAM,OAAO,EAAE,GAAG,KAAA,CAAM,OAAA,EAAS,GAAG,UAAA,CAAW,YAAY,SAAS,CAAA,EAAE,EAAG,KAAA,CAAM,OAAO,CAAA;AAGpI,EAAA,MAAM,WAAA,GAAc,CAAC,KAAA,EAAoB,MAAA,EAAgB,aAAA,KAAuC;AAC9F,IAAA,IAAI,MAAM,OAAA,EAAS;AACnB,IAAA,KAAA,CAAM,OAAA,GAAU,IAAA;AAChB,IAAA,KAAA,CAAM,MAAA,GAAS,MAAA;AACf,IAAA,IAAI,OAAA,CAAQ,IAAI,KAAA,CAAM,QAAQ,MAAM,KAAA,EAAO,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,QAAQ,CAAA;AACxE,IAAA,MAAM,QAAA,uBAAe,GAAA,EAAa;AAClC,IAAA,KAAA,MAAW,KAAA,IAAS,OAAA,CAAQ,MAAA,EAAO,EAAG,IAAI,MAAM,KAAA,KAAU,KAAA,EAAO,QAAA,CAAS,GAAA,CAAI,KAAK,CAAA;AACnF,IAAA,KAAA,MAAW,KAAA,IAAS,OAAA,CAAQ,MAAA,EAAO,EAAG,IAAI,MAAM,KAAA,KAAU,KAAA,EAAO,QAAA,CAAS,GAAA,CAAI,KAAK,CAAA;AACnF,IAAA,KAAA,MAAW,SAAS,QAAA,EAAU;AAC5B,MAAA,IAAI,KAAA,CAAM,UAAU,KAAA,EAAO;AAC3B,MAAA,MAAM,QAAQ,aAAA,GACV,sBAAA,CAAuB,aAAA,EAAe,KAAA,CAAM,YAAY,KAAA,CAAM,SAAS,CAAA,GACvE,cAAA,CAAe,mBAAmB,SAAA,EAAW,UAAA,CAAW,MAAM,UAAA,EAAY,KAAA,CAAM,SAAS,CAAC,CAAA;AAC9F,MAAA,IAAI,MAAM,IAAA,KAAS,QAAA,EAAU,eAAA,CAAgB,KAAA,EAAwB,OAAO,IAAI,CAAA;AAAA,WAC3E;AACH,QAAA,WAAA,CAAY,OAAuB,KAAK,CAAA;AACxC,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AAAA,IACF;AACA,IAAA,KAAA,MAAW,MAAA,IAAU,CAAC,GAAG,YAAY,CAAA,EAAG;AACtC,MAAA,IAAI,MAAA,CAAO,KAAA,KAAU,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,aAAA,GACpC,sBAAA,CAAuB,aAAA,EAAe,MAAA,CAAO,KAAA,CAAM,UAAA,EAAY,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,GACjF,cAAA,CAAe,iBAAA,EAAmB,SAAA,EAAW,UAAA,CAAW,MAAA,CAAO,KAAA,CAAM,UAAA,EAAY,MAAA,CAAO,KAAA,CAAM,KAAK,CAAC,CAAC,CAAA;AAAA,IAC3G;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,UAAA,KAA+D,eAAA,CAAgB,IAAA,CAAK,CAAC,OAAA,KAAY,cAAA,CAAe,OAAA,EAAS,UAAU,CAAC,CAAA;AAEzJ,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,EAAoB,UAAA,KAA2D;AACpG,IAAA,IAAI,eAAA,IAAmB,CAAC,QAAA,EAAU,OAAO,cAAA,CAAe,eAAA,CAAgB,IAAA,EAAM,eAAA,CAAgB,KAAA,EAAO,UAAA,CAAW,UAAA,EAAY,KAAA,CAAM,KAAK,CAAC,CAAA;AACxI,IAAA,IAAI,QAAA,IAAY,KAAA,CAAM,OAAA,EAAS,OAAO,cAAA,CAAe,iBAAA,EAAmB,UAAA,EAAY,UAAA,CAAW,UAAA,EAAY,KAAA,CAAM,KAAK,CAAC,CAAA;AACvH,IAAA,IAAI,YAAA,KAAiB,OAAA,IAAW,YAAA,KAAiB,UAAA,EAAY,OAAO,cAAA,CAAe,iBAAA,EAAmB,UAAA,EAAY,UAAA,CAAW,UAAA,EAAY,KAAA,CAAM,KAAK,CAAC,CAAA;AACrJ,IAAA,IAAI,MAAM,KAAA,IAAS,CAAC,gBAAgB,IAAA,CAAK,CAAC,YAAY,UAAA,CAAW,OAAO,MAAM,UAAA,CAAW,KAAA,CAAM,KAAyB,CAAA,IAAK,OAAA,CAAQ,sBAAsB,KAAA,CAAM,KAAA,EAAO,iBAAiB,CAAA,EAAG;AAC1L,MAAA,OAAO,eAAe,eAAA,EAAiB,UAAA,EAAY,WAAW,UAAA,EAAY,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,IACxF;AAOA,IAAA,IAAI,YAAA,KAAiB,WAAW,CAAC,KAAA,CAAM,SAAS,CAAC,WAAA,CAAY,UAAU,CAAA,EAAG;AACxE,MAAA,OAAO,cAAA,CAAe,wBAAA,EAA0B,MAAA,EAAQ,UAAA,CAAW,UAAU,CAAC,CAAA;AAAA,IAChF;AACA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,cAAA,GAAiB,CAAC,UAAA,EAA8B,OAAA,KAAiG;AACrJ,IAAA,cAAA,CAAe,OAAA,EAAS,QAAQ,UAAU,CAAA;AAC1C,IAAA,MAAM,MAAA,GAAS,UAAA;AACf,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI;AAAE,MAAA,MAAA,GAAS,MAAA,CAAO,OAAA,CAAQ,KAAA,CAAM,OAAO,CAAA;AAAA,IAAG,CAAA,CAAA,MAAQ;AAAE,MAAA,MAAM,cAAA,CAAe,2BAAA,EAA6B,UAAA,EAAY,UAAA,CAAW,UAAU,CAAC,CAAA;AAAA,IAAG;AAC/I,IAAA,IAAI,UAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAM,aAAc,UAAA,CAA2G,QAAA;AAC/H,MAAA,UAAA,GAAa,6BAAA,CAA8B,MAAA,EAAQ,UAAA,EAAY,OAAA,GAAU,MAAM,GAAG,EAAE,MAAA,EAAQ,KAAA,EAAO,UAAA,EAAY,CAAA;AAAA,IACjH,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,KAAA,YAAiB,cAAc,MAAM,KAAA;AACzC,MAAA,MAAM,cAAA,CAAe,kBAAA,EAAoB,UAAA,EAAY,UAAA,CAAW,UAAU,CAAC,CAAA;AAAA,IAC7E;AACA,IAAA,OAAO,EAAE,OAAO,MAAA,EAAQ,QAAA,EAAU,WAAW,QAAA,EAAU,WAAA,EAAa,UAAA,CAAW,KAAA,CAAM,WAAA,EAAY;AAAA,EACnG,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkB,CAAC,UAAA,EAA8B,KAAA,EAAgB,WAAgC,MAAA,KAA4H;AACjO,IAAA,IAAI;AAAE,MAAA,cAAA,CAAe,KAAA,EAAO,QAAQ,SAAS,CAAA;AAAA,IAAG,SAAS,KAAA,EAAO;AAAE,MAAA,MAAA,CAAO,gBAAA,EAAiB;AAAG,MAAA,MAAM,KAAA;AAAA,IAAO;AAC1G,IAAA,MAAM,MAAA,GAAS,UAAA;AACf,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,SAAA,KAAc,UAAA,GAAa,MAAA,CAAO,WAAW,MAAA,CAAO,IAAA;AACrE,MAAA,IAAI,CAAC,QAAA,EAAU,MAAM,IAAI,MAAM,oBAAoB,CAAA;AACnD,MAAA,MAAA,GAAS,QAAA,CAAS,MAAM,KAAK,CAAA;AAAA,IAC/B,CAAA,CAAA,MAAQ;AAAE,MAAA,MAAA,CAAO,gBAAA,EAAiB;AAAG,MAAA,MAAM,cAAA,CAAe,4BAAA,EAA8B,SAAA,EAAW,UAAA,CAAW,UAAU,CAAC,CAAA;AAAA,IAAG;AAC5H,IAAA,IAAI,UAAA;AACJ,IAAA,IAAI;AAAE,MAAA,UAAA,GAAa,6BAAA,CAA8B,MAAA,EAAQ,MAAA,CAAO,QAAA,GAAW,SAAS,CAAA,GAAI,MAAM,CAAA,EAAG,EAAE,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAW,CAAA;AAAA,IAAG,SACzH,KAAA,EAAO;AAAE,MAAA,MAAA,CAAO,gBAAA,EAAiB;AAAG,MAAA,MAAM,KAAA,YAAiB,eAAe,KAAA,GAAQ,cAAA,CAAe,oBAAoB,SAAA,EAAW,UAAA,CAAW,UAAU,CAAC,CAAA;AAAA,IAAG;AAChK,IAAA,IAAI;AAAE,MAAA,qBAAA,CAAsB,QAAQ,UAAA,CAAW,QAAA,EAAU,EAAE,MAAA,EAAQ,KAAA,EAAO,WAAW,CAAA;AAAA,IAAG,SACjF,KAAA,EAAO;AAAE,MAAA,MAAA,CAAO,gBAAA,EAAiB;AAAG,MAAA,MAAM,KAAA;AAAA,IAAO;AACxD,IAAA,OAAO,EAAE,OAAO,MAAA,EAAQ,QAAA,EAAU,WAAW,QAAA,EAAU,KAAA,EAAO,WAAW,KAAA,EAAM;AAAA,EACjF,CAAA;AAEA,EAAA,MAAM,QAAA,GAAW,CAAC,OAAA,EAA6B,QAAA,GAAoC,EAAC,KAAY;AAC9F,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,MAAA,CAAO,OAAO,CAAA;AACpC,IAAA,OAAA,CAAQ,SAAA,CAAU,IAAA,CAAK,OAAA,EAAS,QAAQ,CAAA;AAAA,EAC1C,CAAA;AAEA,EAAA,MAAM,aAAa,CAAC,KAAA,EAAoB,UAAsF,SAAA,EAA6B,WAAA,EAA6B,SAAiB,mBAAA,KAA6D;AACpQ,IAAA,MAAM,WAAA,GAAc,mBAAA,IAAuB,OAAA,CAAQ,QAAA,CAAS,aAAa,KAAK,CAAA;AAC9E,IAAA,IAAI,WAAA,YAAuB,YAAA,EAAc,OAAO,OAAA,CAAQ,OAAO,WAAW,CAAA;AAC1E,IAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,IAAA,MAAM,MAAA,GAAS,aAAa,UAAA,CAAW,MAAA,EAAQ,MAAM,KAAA,EAAO,MAAA,EAAQ,YAAY,MAAM,CAAA;AACtF,IAAA,MAAM,MAAA,GAAS,GAAG,MAAM,CAAA;AACxB,IAAA,OAAO,IAAI,OAAA,CAAiB,CAAC,OAAA,EAAS,MAAA,KAAW;AAC/C,MAAA,MAAM,KAAA,GAAsB,EAAE,MAAA,EAAQ,UAAA,EAAY,MAAM,UAAA,EAAY,SAAA,EAAW,KAAA,EAAO,UAAA,EAAY,OAAA,EAAS,MAAA,CAAO,SAAS,WAAA,EAAa,KAAA,EAAO,QAAW,OAAA,EAAS,KAAA,EAAO,YAAY,KAAA,EAAO,IAAA,EAAM,OAAA,EAAS,OAAA,EAAS,MAAA,EAAO;AAC5N,MAAA,OAAA,CAAQ,GAAA,CAAI,QAAQ,KAAK,CAAA;AACzB,MAAA,MAAM,UAAU,MAAY;AAC1B,QAAA,IAAI,MAAM,OAAA,EAAS;AACnB,QAAA,WAAA,CAAY,KAAA,EAAO,eAAe,mBAAA,EAAqB,SAAA,EAAW,WAAW,KAAA,CAAM,UAAA,EAAY,SAAS,CAAC,CAAC,CAAA;AAC1G,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB,CAAA;AACA,MAAA,MAAA,CAAO,OAAO,gBAAA,CAAiB,OAAA,EAAS,SAAS,EAAE,IAAA,EAAM,MAAM,CAAA;AAC/D,MAAA,KAAA,CAAM,KAAA,GAAQ,WAAW,MAAM;AAC7B,QAAA,IAAI,MAAM,OAAA,EAAS;AACnB,QAAA,WAAA,CAAY,KAAA,EAAO,eAAe,cAAA,EAAgB,SAAA,EAAW,WAAW,KAAA,CAAM,UAAA,EAAY,SAAS,CAAC,CAAC,CAAA;AACrG,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB,GAAG,OAAO,CAAA;AACV,MAAA,IAAI,MAAA,CAAO,OAAO,OAAA,EAAS;AAAE,QAAA,OAAA,EAAQ;AAAG,QAAA;AAAA,MAAQ;AAChD,MAAA,IAAI;AACF,QAAA,QAAA,CAAS,EAAE,IAAA,EAAM,iBAAA,EAAmB,eAAA,EAAiB,wBAAA,EAA0B,QAAQ,YAAA,EAAc,KAAA,CAAM,UAAA,CAAW,EAAA,EAAI,iBAAiB,KAAA,CAAM,UAAA,CAAW,OAAA,EAAS,iBAAA,EAAmB,UAAU,iBAAA,EAAmB,IAAA,EAAM,OAAA,EAAS,SAAA,EAAW,SAAS,OAAA,EAAS,QAAA,CAAS,KAAA,EAAO,GAAI,YAAY,WAAA,KAAgB,KAAA,CAAA,GAAY,EAAE,WAAA,EAAa,YAAY,WAAA,EAAY,GAAI,EAAC,EAAG,EAAG,SAAS,QAAQ,CAAA;AAAA,MAClY,CAAA,CAAA,MAAQ;AACN,QAAA,WAAA,CAAY,KAAA,EAAO,eAAe,sBAAA,EAAwB,UAAA,EAAY,WAAW,KAAA,CAAM,UAAA,EAAY,SAAS,CAAC,CAAC,CAAA;AAAA,MAChH;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,cAAA,GAAiB,CAAC,KAAA,EAAoB,QAAA,EAAsF,WAAA,KAAkD;AAClL,IAAA,MAAM,OAAA,GAAU,SAAA,CAAU,WAAA,CAAY,SAAA,EAAW,cAAc,CAAA;AAC/D,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,GAAI,OAAA;AAC9B,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,QAAA,CAAS,WAAA,EAAa,KAAK,CAAA;AACpD,IAAA,IAAI,QAAA,YAAoB,YAAA,EAAc,OAAO,OAAA,CAAQ,OAAO,QAAQ,CAAA;AACpE,IAAA,OAAO,IAAI,OAAA,CAAiB,CAAC,OAAA,EAAS,MAAA,KAAW;AAC/C,MAAA,MAAM,MAAA,GAA4B;AAAA,QAChC,KAAA;AAAA,QACA,QAAA;AAAA,QACA,WAAA,EAAa,QAAA;AAAA,QACb,QAAA;AAAA,QACA,IAAA,EAAM,OAAA;AAAA,QACN,QAAA,EAAU,KAAA;AAAA,QACV,MAAM,MAAM,MAAA;AAAA,QACZ,OAAO,MAAM;AAAA,OACf;AACA,MAAA,MAAM,UAAU,MAAY;AAAE,QAAA,IAAI,MAAA,CAAO,KAAA,KAAU,MAAA,EAAW,YAAA,CAAa,OAAO,KAAK,CAAA;AAAG,QAAA,MAAA,CAAO,cAAA,IAAiB;AAAG,QAAA,WAAA,CAAY,MAAA,EAAQ,mBAAA,CAAoB,OAAA,EAAS,OAAO,CAAA;AAAG,QAAA,YAAA,CAAa,OAAO,MAAM,CAAA;AAAA,MAAG,CAAA;AAC7M,MAAA,MAAA,CAAO,IAAA,GAAO,CAAC,KAAA,KAAyB;AACtC,QAAA,IAAI,OAAO,QAAA,EAAU;AACrB,QAAA,MAAA,CAAO,QAAA,GAAW,IAAA;AAClB,QAAA,OAAA,EAAQ;AACR,QAAA,kBAAA,CAAmB,OAAO,WAAW,CAAA;AACrC,QAAA,MAAA,CAAO,KAAK,CAAA;AAAA,MACd,CAAA;AACA,MAAA,MAAA,CAAO,KAAA,GAAQ,CAAC,SAAA,EAA6B,SAAA,KAA4B;AACvE,QAAA,IAAI,OAAO,QAAA,EAAU;AACrB,QAAA,MAAA,CAAO,QAAA,GAAW,IAAA;AAClB,QAAA,OAAA,EAAQ;AACR,QAAA,IAAI,CAAC,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,KAAA,GAAQ,SAAA;AAChC,QAAA,KAAK,UAAA,CAAW,KAAA,EAAO,QAAA,EAAU,SAAA,EAAW,WAAA,EAAa,SAAA,EAAW,MAAA,CAAO,WAAW,CAAA,CAAE,IAAA,CAAK,OAAA,EAAS,MAAM,CAAA;AAAA,MAC9G,CAAA;AACA,MAAA,MAAM,QAAQ,MAAY;AACxB,QAAA,IAAI,OAAO,QAAA,EAAU;AACrB,QAAA,MAAM,WAAA,GAAc,aAAA,CAAc,KAAA,EAAO,KAAA,CAAM,UAAU,CAAA;AACzD,QAAA,IAAI,WAAA,EAAa;AAAE,UAAA,MAAA,CAAO,KAAK,WAAW,CAAA;AAAG,UAAA;AAAA,QAAQ;AACrD,QAAA,MAAM,SAAA,GAAY,KAAA,CAAM,KAAA,IAAS,WAAA,CAAY,MAAM,UAAU,CAAA;AAC7D,QAAA,IAAI,CAAC,SAAA,EAAW;AAChB,QAAA,MAAM,SAAA,GAAY,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI;AACtC,QAAA,IAAI,aAAa,CAAA,EAAG;AAAE,UAAA,MAAA,CAAO,IAAA,CAAK,eAAe,cAAA,EAAgB,MAAA,EAAQ,WAAW,KAAA,CAAM,UAAU,CAAC,CAAC,CAAA;AAAG,UAAA;AAAA,QAAQ;AACjH,QAAA,MAAA,CAAO,KAAA,CAAM,WAAW,SAAS,CAAA;AAAA,MACnC,CAAA;AACA,MAAA,MAAM,OAAA,GAAU,MAAY,MAAA,CAAO,IAAA,CAAK,cAAA,CAAe,mBAAA,EAAqB,SAAA,EAAW,UAAA,CAAW,KAAA,CAAM,UAAU,CAAC,CAAC,CAAA;AACpH,MAAA,MAAA,CAAO,KAAA,GAAQ,UAAA,CAAW,MAAM,MAAA,CAAO,KAAK,cAAA,CAAe,cAAA,EAAgB,MAAA,EAAQ,UAAA,CAAW,KAAA,CAAM,UAAU,CAAC,CAAC,GAAG,OAAO,CAAA;AAC1H,MAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,QAAA,IAAI,WAAA,CAAY,OAAO,OAAA,EAAS;AAAE,UAAA,OAAA,EAAQ;AAAG,UAAA;AAAA,QAAQ;AACrD,QAAA,WAAA,CAAY,OAAO,gBAAA,CAAiB,OAAA,EAAS,SAAS,EAAE,IAAA,EAAM,MAAM,CAAA;AAAA,MACtE;AACA,MAAA,SAAA,CAAU,IAAI,KAAK,CAAA;AACnB,MAAA,MAAA,CAAO,cAAA,GAAiB,MAAM,SAAA,CAAU,MAAA,CAAO,KAAK,CAAA;AACpD,MAAA,YAAA,CAAa,IAAI,MAAM,CAAA;AACvB,MAAA,KAAA,EAAM;AAAA,IACR,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,IAAA,GAAO,CAAC,KAAA,EAAoB,OAAA,EAAkB,WAAA,KAAkD;AACpG,IAAA,MAAM,WAAA,GAAc,aAAA,CAAc,KAAA,EAAO,KAAA,CAAM,UAAU,CAAA;AACzD,IAAA,IAAI,WAAA,EAAa,OAAO,OAAA,CAAQ,MAAA,CAAO,WAAW,CAAA;AAClD,IAAA,MAAM,OAAA,GAAU,SAAA,CAAU,WAAA,CAAY,SAAA,EAAW,cAAc,CAAA;AAC/D,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI;AAAE,MAAA,QAAA,GAAW,cAAA,CAAe,KAAA,CAAM,UAAA,EAAY,OAAO,CAAA;AAAA,IAAG,SACrD,KAAA,EAAO;AAAE,MAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,KAAA,YAAiB,YAAA,GAAe,KAAA,GAAQ,cAAA,CAAe,2BAAA,EAA6B,UAAA,EAAY,UAAA,CAAW,KAAA,CAAM,UAAU,CAAC,CAAC,CAAA;AAAA,IAAG;AACtK,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,KAAA,IAAS,WAAA,CAAY,MAAM,UAAU,CAAA;AAC7D,IAAA,IAAI,CAAC,SAAA,EAAW,OAAO,cAAA,CAAe,KAAA,EAAO,UAAU,WAAW,CAAA;AAClE,IAAA,IAAI,CAAC,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,KAAA,GAAQ,SAAA;AAChC,IAAA,OAAO,UAAA,CAAW,KAAA,EAAO,QAAA,EAAU,SAAA,EAAW,aAAa,OAAO,CAAA;AAAA,EACpE,CAAA;AAEA,EAAA,MAAM,0BAAA,GAA6B,CAAC,KAAA,KAAqD;AACvF,IAAA,IAAI,WAAA;AACJ,IAAA,IAAI,YAAA;AACJ,IAAA,MAAM,KAAA,GAAQ,IAAI,OAAA,CAAc,CAAC,GAAG,MAAA,KAAW;AAAE,MAAA,WAAA,GAAc,MAAA;AAAA,IAAQ,CAAC,CAAA;AACxE,IAAA,MAAM,MAAA,GAAS,IAAI,OAAA,CAAc,CAAC,GAAG,MAAA,KAAW;AAAE,MAAA,YAAA,GAAe,MAAA;AAAA,IAAQ,CAAC,CAAA;AAC1E,IAAA,KAAK,KAAA,CAAM,KAAA,CAAM,MAAM,MAAS,CAAA;AAChC,IAAA,KAAK,MAAA,CAAO,KAAA,CAAM,MAAM,MAAS,CAAA;AACjC,IAAA,WAAA,CAAY,KAAK,CAAA;AACjB,IAAA,YAAA,CAAa,KAAK,CAAA;AAClB,IAAA,OAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,MAAA,GAAS;AAAA,IAAiB,CAAA,EAAE;AAAA,EACtD,CAAA;AAEA,EAAA,MAAM,cAAc,CAAC,KAAA,EAAoB,UAAsF,SAAA,EAA6B,mBAAA,EAAsD,SAAiB,mBAAA,KAAwE;AACzS,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,OAAO,eAAe,CAAA;AAC1D,IAAA,MAAM,MAAA,GAAS,oBAAoB,aAAA,IAAiB,EAAA;AACpD,IAAA,IAAI,CAAC,WAAA,CAAY,MAAA,EAAQ,aAAa,CAAA,EAAG;AACvC,MAAA,IAAI,mBAAA,qBAAwC,mBAAmB,CAAA;AAC/D,MAAA,OAAO,0BAAA,CAA2B,eAAe,iBAAA,EAAmB,UAAA,EAAY,WAAW,KAAA,CAAM,UAAA,EAAY,SAAS,CAAC,CAAC,CAAA;AAAA,IAC1H;AACA,IAAA,MAAM,WAAA,GAAc,mBAAA,IAAuB,OAAA,CAAQ,QAAA,CAAS,aAAa,IAAI,CAAA;AAC7E,IAAA,IAAI,WAAA,YAAuB,YAAA,EAAc,OAAO,0BAAA,CAA2B,WAAW,CAAA;AACtF,IAAA,IAAI,YAAA;AACJ,IAAA,IAAI,WAAA;AACJ,IAAA,IAAI,aAAA;AACJ,IAAA,IAAI,YAAA;AACJ,IAAA,MAAM,KAAA,GAAQ,IAAI,OAAA,CAAc,CAAC,SAAS,MAAA,KAAW;AAAE,MAAA,YAAA,GAAe,OAAA;AAAS,MAAA,WAAA,GAAc,MAAA;AAAA,IAAQ,CAAC,CAAA;AACtG,IAAA,MAAM,MAAA,GAAS,IAAI,OAAA,CAAc,CAAC,SAAS,MAAA,KAAW;AAAE,MAAA,aAAA,GAAgB,OAAA;AAAS,MAAA,YAAA,GAAe,MAAA;AAAA,IAAQ,CAAC,CAAA;AACzG,IAAA,KAAK,KAAA,CAAM,KAAA,CAAM,MAAM,MAAS,CAAA;AAChC,IAAA,KAAK,MAAA,CAAO,KAAA,CAAM,MAAM,MAAS,CAAA;AACjC,IAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,IAAA,MAAM,MAAA,GAAS,aAAa,UAAA,CAAW,MAAA,EAAQ,MAAM,KAAA,EAAO,MAAA,EAAQ,oBAAoB,MAAM,CAAA;AAC9F,IAAA,MAAM,MAAA,GAAS,GAAG,QAAQ,CAAA;AAC1B,IAAA,MAAM,KAAA,GAAuB;AAAA,MAC3B,MAAA;AAAA,MAAQ,YAAY,KAAA,CAAM,UAAA;AAAA,MAAY,SAAA;AAAA,MAAW,KAAA;AAAA,MAAO,UAAA;AAAA,MAAY,SAAS,MAAA,CAAO,OAAA;AAAA,MAAS,WAAA;AAAA,MAAa,KAAA,EAAO,MAAA;AAAA,MAAW,OAAA,EAAS,KAAA;AAAA,MAAO,UAAA,EAAY,KAAA;AAAA,MACxJ,IAAA,EAAM,QAAA;AAAA,MAAU,QAAQ,mBAAA,CAAoB,MAAA;AAAA,MAAQ,UAAA,EAAa,MAAM,UAAA,CAAmF,IAAA;AAAA,MAC1J,MAAA;AAAA,MAAQ,MAAA,EAAQ,MAAA;AAAA,MAAQ,QAAA,EAAU,CAAA;AAAA,MAAG,KAAA,EAAO,SAAA;AAAA,MAAW,YAAA,EAAc,KAAA;AAAA,MAAO,UAAA,EAAY,KAAA;AAAA,MAAO,QAAA,EAAU,KAAA;AAAA,MAAO,YAAA,EAAc,KAAA;AAAA,MAAO,aAAA,EAAe,KAAA;AAAA,MAAO,OAAO,EAAC;AAAA,MACnK,YAAA;AAAA,MAAc,WAAA;AAAA,MAAa,aAAA;AAAA,MAAe;AAAA,KAC5C;AACA,IAAA,OAAA,CAAQ,GAAA,CAAI,QAAQ,KAAK,CAAA;AACzB,IAAA,OAAA,CAAQ,GAAA,CAAI,QAAQ,KAAK,CAAA;AACzB,IAAA,MAAM,SAAS,MAAY;AACzB,MAAA,IAAI,KAAA,CAAM,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,UAAU,QAAA,EAAU;AAC1D,MAAA,eAAA,CAAgB,KAAA,EAAO,cAAA,CAAe,mBAAA,EAAqB,SAAA,EAAW,UAAA,CAAW,MAAM,UAAA,EAAY,SAAS,CAAC,CAAA,EAAG,IAAI,CAAA;AAAA,IACtH,CAAA;AACA,IAAA,MAAA,CAAO,OAAO,gBAAA,CAAiB,OAAA,EAAS,QAAQ,EAAE,IAAA,EAAM,MAAM,CAAA;AAC9D,IAAA,KAAA,CAAM,KAAA,GAAQ,WAAW,MAAM;AAC7B,MAAA,IAAI,KAAA,CAAM,UAAU,SAAA,EAAW;AAC/B,MAAA,eAAA,CAAgB,KAAA,EAAO,cAAA,CAAe,cAAA,EAAgB,MAAA,EAAQ,UAAA,CAAW,MAAM,UAAA,EAAY,SAAS,CAAC,CAAA,EAAG,IAAI,CAAA;AAAA,IAC9G,GAAG,OAAO,CAAA;AACV,IAAA,IAAI,MAAA,CAAO,OAAO,OAAA,EAAS;AAAE,MAAA,MAAA,EAAO;AAAG,MAAA,OAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAO;AAAA,IAAG;AACzE,IAAA,IAAI;AACF,MAAA,QAAA,CAAS,EAAE,IAAA,EAAM,iBAAA,EAAmB,eAAA,EAAiB,wBAAA,EAA0B,QAAQ,YAAA,EAAc,KAAA,CAAM,UAAA,CAAW,EAAA,EAAI,iBAAiB,KAAA,CAAM,UAAA,CAAW,SAAS,iBAAA,EAAmB,SAAA,CAAU,mBAAmB,IAAA,EAAM,QAAA,EAAU,SAAA,EAAW,OAAA,EAAS,SAAS,QAAA,CAAS,KAAA,EAAO,eAAe,MAAA,EAAQ,GAAI,oBAAoB,WAAA,KAAgB,KAAA,CAAA,GAAY,EAAE,WAAA,EAAa,oBAAoB,WAAA,EAAY,GAAI,EAAC,EAAG,EAAG,SAAS,QAAQ,CAAA;AAAA,IAC1a,CAAA,CAAA,MAAQ;AACN,MAAA,eAAA,CAAgB,KAAA,EAAO,cAAA,CAAe,sBAAA,EAAwB,UAAA,EAAY,UAAA,CAAW,MAAM,UAAA,EAAY,SAAS,CAAC,CAAA,EAAG,KAAK,CAAA;AAAA,IAC3H;AACA,IAAA,OAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAO;AAAA,EACjC,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,EAAoB,QAAA,EAAsF,mBAAA,KAAsF;AACrN,IAAA,MAAM,OAAA,GAAU,SAAA,CAAU,mBAAA,CAAoB,SAAA,EAAW,cAAc,CAAA;AACvE,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,GAAI,OAAA;AAC9B,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,QAAA,CAAS,WAAA,EAAa,IAAI,CAAA;AACnD,IAAA,IAAI,QAAA,YAAoB,YAAA,EAAc,OAAO,0BAAA,CAA2B,QAAQ,CAAA;AAChF,IAAA,IAAI,YAAA;AACJ,IAAA,IAAI,WAAA;AACJ,IAAA,IAAI,aAAA;AACJ,IAAA,IAAI,YAAA;AACJ,IAAA,MAAM,KAAA,GAAQ,IAAI,OAAA,CAAc,CAAC,SAAS,MAAA,KAAW;AAAE,MAAA,YAAA,GAAe,OAAA;AAAS,MAAA,WAAA,GAAc,MAAA;AAAA,IAAQ,CAAC,CAAA;AACtG,IAAA,MAAM,MAAA,GAAS,IAAI,OAAA,CAAc,CAAC,SAAS,MAAA,KAAW;AAAE,MAAA,aAAA,GAAgB,OAAA;AAAS,MAAA,YAAA,GAAe,MAAA;AAAA,IAAQ,CAAC,CAAA;AACzG,IAAA,KAAK,KAAA,CAAM,KAAA,CAAM,MAAM,MAAS,CAAA;AAChC,IAAA,KAAK,MAAA,CAAO,KAAA,CAAM,MAAM,MAAS,CAAA;AACjC,IAAA,IAAI,MAAA;AACJ,IAAA,MAAM,MAAA,GAA4B;AAAA,MAChC,KAAA;AAAA,MACA,QAAA;AAAA,MACA,WAAA,EAAa,QAAA;AAAA,MACb,QAAA;AAAA,MACA,IAAA,EAAM,QAAA;AAAA,MACN,QAAA,EAAU,KAAA;AAAA,MACV,MAAM,MAAM,MAAA;AAAA,MACZ,OAAO,MAAM;AAAA,KACf;AACA,IAAA,MAAM,UAAU,MAAY;AAAE,MAAA,IAAI,MAAA,CAAO,KAAA,KAAU,MAAA,EAAW,YAAA,CAAa,OAAO,KAAK,CAAA;AAAG,MAAA,MAAA,CAAO,cAAA,IAAiB;AAAG,MAAA,mBAAA,CAAoB,MAAA,EAAQ,mBAAA,CAAoB,OAAA,EAAS,OAAO,CAAA;AAAG,MAAA,YAAA,CAAa,OAAO,MAAM,CAAA;AAAA,IAAG,CAAA;AACrN,IAAA,MAAA,CAAO,IAAA,GAAO,CAAC,KAAA,KAAyB;AAAE,MAAA,IAAI,OAAO,QAAA,EAAU;AAAQ,MAAA,MAAA,CAAO,QAAA,GAAW,IAAA;AAAM,MAAA,OAAA,EAAQ;AAAG,MAAA,kBAAA,CAAmB,OAAO,WAAW,CAAA;AAAG,MAAA,WAAA,CAAY,KAAK,CAAA;AAAG,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IAAG,CAAA;AAC3L,IAAA,MAAA,CAAO,KAAA,GAAQ,CAAC,SAAA,EAA6B,SAAA,KAA4B;AACvE,MAAA,IAAI,OAAO,QAAA,EAAU;AACrB,MAAA,MAAA,CAAO,QAAA,GAAW,IAAA;AAClB,MAAA,OAAA,EAAQ;AACR,MAAA,IAAI,CAAC,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,KAAA,GAAQ,SAAA;AAChC,MAAA,MAAA,GAAS,YAAY,KAAA,EAAO,QAAA,EAAU,WAAW,mBAAA,EAAqB,SAAA,EAAW,OAAO,WAAW,CAAA;AACnG,MAAA,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,YAAA,EAAc,WAAW,CAAA;AAC3C,MAAA,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,aAAA,EAAe,YAAY,CAAA;AAAA,IAChD,CAAA;AACA,IAAA,MAAM,OAAA,GAAU,MAAY,MAAA,CAAO,IAAA,CAAK,cAAA,CAAe,mBAAA,EAAqB,SAAA,EAAW,UAAA,CAAW,KAAA,CAAM,UAAU,CAAC,CAAC,CAAA;AACpH,IAAA,MAAM,QAAQ,MAAY;AACxB,MAAA,IAAI,OAAO,QAAA,EAAU;AACrB,MAAA,MAAM,WAAA,GAAc,aAAA,CAAc,KAAA,EAAO,KAAA,CAAM,UAAU,CAAA;AACzD,MAAA,IAAI,WAAA,EAAa;AAAE,QAAA,MAAA,CAAO,KAAK,WAAW,CAAA;AAAG,QAAA;AAAA,MAAQ;AACrD,MAAA,MAAM,SAAA,GAAY,KAAA,CAAM,KAAA,IAAS,WAAA,CAAY,MAAM,UAAU,CAAA;AAC7D,MAAA,IAAI,CAAC,SAAA,EAAW;AAChB,MAAA,MAAM,SAAA,GAAY,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI;AACtC,MAAA,IAAI,aAAa,CAAA,EAAG;AAAE,QAAA,MAAA,CAAO,IAAA,CAAK,eAAe,cAAA,EAAgB,MAAA,EAAQ,WAAW,KAAA,CAAM,UAAU,CAAC,CAAC,CAAA;AAAG,QAAA;AAAA,MAAQ;AACjH,MAAA,MAAA,CAAO,KAAA,CAAM,WAAW,SAAS,CAAA;AAAA,IACnC,CAAA;AACA,IAAA,MAAA,CAAO,KAAA,GAAQ,UAAA,CAAW,MAAM,MAAA,CAAO,KAAK,cAAA,CAAe,cAAA,EAAgB,MAAA,EAAQ,UAAA,CAAW,KAAA,CAAM,UAAU,CAAC,CAAC,GAAG,OAAO,CAAA;AAC1H,IAAA,IAAI,oBAAoB,MAAA,EAAQ;AAC9B,MAAA,IAAI,mBAAA,CAAoB,OAAO,OAAA,EAAS;AAAE,QAAA,OAAA,EAAQ;AAAG,QAAA,OAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,MAAA,GAAS;AAAA,QAAiB,CAAA,EAAE;AAAA,MAAG;AAC5G,MAAA,mBAAA,CAAoB,OAAO,gBAAA,CAAiB,OAAA,EAAS,SAAS,EAAE,IAAA,EAAM,MAAM,CAAA;AAAA,IAC9E;AACA,IAAA,SAAA,CAAU,IAAI,KAAK,CAAA;AACnB,IAAA,MAAA,CAAO,cAAA,GAAiB,MAAM,SAAA,CAAU,MAAA,CAAO,KAAK,CAAA;AACpD,IAAA,YAAA,CAAa,IAAI,MAAM,CAAA;AACvB,IAAA,KAAA,EAAM;AACN,IAAA,OAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,MAAA,CAAO,SAAS,kBAAA,EAAoB;AAAe,MAAA,IAAI,MAAA,EAAQ,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA;AAAA,WAAQ,MAAA,CAAO,KAAK,cAAA,CAAe,mBAAA,EAAqB,WAAW,UAAA,CAAW,KAAA,CAAM,UAAU,CAAC,CAAC,CAAA;AAAA,IAAG,CAAA,EAAE;AAAA,EAClN,CAAA;AAEA,EAAA,MAAM,SAAA,GAAY,CAAC,KAAA,EAAoB,OAAA,EAAkB,mBAAA,KAAsF;AAC7I,IAAA,MAAM,WAAA,GAAc,aAAA,CAAc,KAAA,EAAO,KAAA,CAAM,UAAU,CAAA;AACzD,IAAA,IAAI,WAAA,EAAa,OAAO,0BAAA,CAA2B,WAAW,CAAA;AAC9D,IAAA,IAAI,OAAO,mBAAA,CAAoB,MAAA,KAAW,UAAA,EAAY,OAAO,0BAAA,CAA2B,cAAA,CAAe,2BAAA,EAA6B,UAAA,EAAY,UAAA,CAAW,KAAA,CAAM,UAAU,CAAC,CAAC,CAAA;AAC7K,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI;AAAE,MAAA,QAAA,GAAW,cAAA,CAAe,KAAA,CAAM,UAAA,EAAY,OAAO,CAAA;AAAA,IAAG,SACrD,KAAA,EAAO;AAAE,MAAA,OAAO,0BAAA,CAA2B,KAAA,YAAiB,YAAA,GAAe,KAAA,GAAQ,cAAA,CAAe,2BAAA,EAA6B,UAAA,EAAY,UAAA,CAAW,KAAA,CAAM,UAAU,CAAC,CAAC,CAAA;AAAA,IAAG;AAClL,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,KAAA,IAAS,WAAA,CAAY,MAAM,UAAU,CAAA;AAC7D,IAAA,IAAI,CAAC,SAAA,EAAW,OAAO,aAAA,CAAc,KAAA,EAAO,UAAU,mBAAmB,CAAA;AACzE,IAAA,IAAI,CAAC,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,KAAA,GAAQ,SAAA;AAChC,IAAA,OAAO,WAAA,CAAY,OAAO,QAAA,EAAU,SAAA,EAAW,qBAAqB,SAAA,CAAU,mBAAA,CAAoB,SAAA,EAAW,cAAc,CAAC,CAAA;AAAA,EAC9H,CAAA;AAEA,EAAA,IAAI,WAAA;AACJ,EAAA,MAAM,oBAAA,GAAuB,CAAC,MAAA,KAAgC;AAC5D,IAAA,IAAI,MAAA,CAAO,qBAAA,IAAyB,MAAA,CAAO,KAAA,KAAU,QAAA,IAAY,MAAA,CAAO,KAAA,KAAU,QAAA,IAAY,MAAA,CAAO,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG;AACzH,IAAA,MAAA,CAAO,qBAAA,GAAwB,MAAA,CAAO,uBAAA,CAAwB,MAAM;AAClE,MAAA,MAAA,CAAO,qBAAA,GAAwB,MAAA;AAC/B,MAAA,WAAA,CAAY,MAAM,CAAA;AAAA,IACpB,CAAC,CAAA;AAAA,EACH,CAAA;AACA,EAAA,WAAA,GAAc,CAAC,MAAA,KAAgC;AAC7C,IAAA,IAAI,OAAO,QAAA,EAAU;AACrB,IAAA,MAAA,CAAO,QAAA,GAAW,IAAA;AAClB,IAAA,KAAA,CAAM,YAAY;AAChB,MAAA,IAAI;AACF,QAAA,OAAO,MAAA,CAAO,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG;AAC9B,UAAA,IAAI,MAAA,CAAO,KAAA,KAAU,QAAA,IAAY,MAAA,CAAO,UAAU,QAAA,EAAU;AAC5D,UAAA,MAAM,IAAA,GAAO,MAAA,CAAO,KAAA,CAAM,KAAA,EAAM;AAChC,UAAA,IAAI,CAAC,IAAA,EAAM;AACX,UAAA,IAAI,mBAAmB,IAAA,IAAQ,MAAA,CAAO,4BAA4B,MAAA,CAAO,cAAA,IAAkB,OAAO,2BAAA,EAA6B;AAC7H,YAAA,MAAA,CAAO,KAAA,CAAM,QAAQ,IAAI,CAAA;AACzB,YAAA,oBAAA,CAAqB,MAAM,CAAA;AAC3B,YAAA;AAAA,UACF;AACA,UAAA,MAAA,CAAO,qBAAA,IAAwB;AAC/B,UAAA,MAAA,CAAO,qBAAA,GAAwB,KAAA,CAAA;AAC/B,UAAA,MAAM,SAAA,GAAqC,EAAE,MAAA,EAAQ,IAAA,EAAM,UAAU,KAAA,EAAM;AAC3E,UAAA,kBAAA,CAAmB,IAAI,SAAS,CAAA;AAChC,UAAA,MAAA,CAAO,cAAA,IAAkB,CAAA;AACzB,UAAA,MAAA,CAAO,UAAA,GAAa,IAAA;AACpB,UAAA,IAAI;AAIF,YAAA,IAAA,CAAK,OAAO,OAAA,EAAQ;AACpB,YAAA,MAAM,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AAC9B,YAAA,IAAI,MAAA,CAAO,KAAA,KAAU,QAAA,IAAY,CAAC,OAAO,YAAA,EAAc;AACrD,cAAA,MAAA,CAAO,MAAA,IAAU,CAAA;AACjB,cAAA,IAAI;AAAE,gBAAA,QAAA,CAAS,EAAE,IAAA,EAAM,mBAAA,EAAqB,eAAA,EAAiB,0BAA0B,MAAA,EAAQ,MAAA,CAAO,MAAA,EAAQ,iBAAA,EAAmB,MAAA,CAAO,SAAA,CAAU,iBAAA,EAAmB,KAAA,EAAO,GAAG,CAAA;AAAA,cAAG,CAAA,CAAA,MAC5K;AAAE,gBAAA,eAAA,CAAgB,MAAA,EAAQ,cAAA,CAAe,uBAAA,EAAyB,UAAA,EAAY,UAAA,CAAW,MAAA,CAAO,UAAA,EAAY,MAAA,CAAO,SAAS,CAAC,CAAA,EAAG,IAAI,CAAA;AAAG,gBAAA;AAAA,cAAO;AAAA,YACtJ;AAAA,UACF,CAAA,CAAA,MAAQ;AACN,YAAA,eAAA,CAAgB,MAAA,EAAQ,cAAA,CAAe,gBAAA,EAAkB,SAAA,EAAW,UAAA,CAAW,MAAA,CAAO,UAAA,EAAY,MAAA,CAAO,SAAS,CAAC,CAAA,EAAG,IAAI,CAAA;AAC1H,YAAA;AAAA,UACF,CAAA,SAAE;AACA,YAAA,MAAA,CAAO,UAAA,GAAa,KAAA;AACpB,YAAA,wBAAA,CAAyB,SAAS,CAAA;AAAA,UACpC;AAAA,QACF;AAAA,MACF,CAAA,SAAE;AACA,QAAA,MAAA,CAAO,UAAA,GAAa,KAAA;AACpB,QAAA,MAAA,CAAO,QAAA,GAAW,KAAA;AAClB,QAAA,IAAI,MAAA,CAAO,MAAM,MAAA,KAAW,CAAA,IAAK,OAAO,KAAA,KAAU,QAAA,IAAY,MAAA,CAAO,KAAA,KAAU,QAAA,EAAU;AACvF,UAAA,MAAA,CAAO,qBAAA,IAAwB;AAC/B,UAAA,MAAA,CAAO,qBAAA,GAAwB,MAAA;AAAA,QACjC,CAAA,MAAO;AAIL,UAAA,oBAAA,CAAqB,MAAM,CAAA;AAAA,QAC7B;AACA,QAAA,cAAA,CAAe,MAAM,CAAA;AACrB,QAAA,YAAA,CAAa,MAAM,CAAA;AAAA,MACrB;AAAA,IACF,CAAA,GAAG,CAAE,KAAA,CAAM,MAAM;AACf,MAAA,eAAA,CAAgB,MAAA,EAAQ,cAAA,CAAe,gBAAA,EAAkB,SAAA,EAAW,UAAA,CAAW,MAAA,CAAO,UAAA,EAAY,MAAA,CAAO,SAAS,CAAC,CAAA,EAAG,IAAI,CAAA;AAAA,IAC5H,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CAAC,MAAA,GAAS,mCAAA,EAAqC,aAAA,KAAuC;AAIvG,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,KAAA,MAAW,MAAA,IAAU,CAAC,GAAG,YAAY,GAAG,MAAA,CAAO,IAAA,CAAK,sBAAA,CAAuB,aAAA,EAAe,OAAO,KAAA,CAAM,UAAA,EAAY,MAAA,CAAO,KAAA,CAAM,KAAK,CAAC,CAAA;AACtI,MAAA,KAAA,MAAW,SAAS,CAAC,GAAG,OAAA,CAAQ,MAAA,EAAQ,CAAA,EAAG;AACzC,QAAA,MAAM,QAAQ,sBAAA,CAAuB,aAAA,EAAe,KAAA,CAAM,UAAA,EAAY,MAAM,SAAS,CAAA;AACrF,QAAA,IAAI,MAAM,IAAA,KAAS,QAAA,EAAU,eAAA,CAAgB,KAAA,EAAO,OAAO,IAAI,CAAA;AAAA,aAC1D,WAAA,CAAY,OAAO,KAAK,CAAA;AAAA,MAC/B;AAAA,IACF;AACA,IAAA,KAAA,MAAW,SAAS,OAAA,CAAQ,MAAA,IAAU,WAAA,CAAY,KAAA,EAAO,QAAQ,aAAa,CAAA;AAC9E,IAAA,IAAI,CAAC,eAAe,KAAA,MAAW,MAAA,IAAU,CAAC,GAAG,YAAY,GAAG,MAAA,CAAO,IAAA,CAAK,eAAe,eAAA,EAAiB,SAAA,EAAW,WAAW,MAAA,CAAO,KAAA,CAAM,YAAY,MAAA,CAAO,KAAA,CAAM,KAAK,CAAC,CAAC,CAAA;AAC3K,IAAA,OAAA,CAAQ,KAAA,EAAM;AACd,IAAA,IAAI,CAAC,eAAe,KAAA,MAAW,KAAA,IAAS,CAAC,GAAG,OAAA,CAAQ,MAAA,EAAQ,CAAA,EAAG;AAC7D,MAAA,IAAI,KAAA,CAAM,IAAA,KAAS,QAAA,EAAU,eAAA,CAAgB,OAAO,cAAA,CAAe,eAAA,EAAiB,SAAA,EAAW,UAAA,CAAW,MAAM,UAAA,EAAY,KAAA,CAAM,SAAS,CAAC,GAAG,IAAI,CAAA;AAAA,WAC9I,WAAA,CAAY,KAAA,EAAO,cAAA,CAAe,eAAA,EAAiB,SAAA,EAAW,UAAA,CAAW,KAAA,CAAM,UAAA,EAAY,KAAA,CAAM,SAAS,CAAC,CAAC,CAAA;AAAA,IACnH;AACA,IAAA,eAAA,GAAkB,EAAC;AACnB,IAAA,YAAA,GAAe,WAAW,UAAA,GAAa,OAAA;AACvC,IAAA,IAAA,EAAK;AAAA,EACP,CAAA;AAEA,EAAA,MAAM,SAAA,GAAY,CAAC,MAAA,EAAgB,IAAA,GAA0F,iBAAA,KAA4B;AACvJ,IAAA,IAAI,QAAA,EAAU;AACd,IAAA,eAAA,GAAkB,cAAA,CAAe,MAAM,SAAS,CAAA;AAChD,IAAA,UAAA,CAAW,QAAQ,eAAe,CAAA;AAClC,IAAA,IAAI;AAAE,MAAA,OAAA,CAAQ,UAAU,KAAA,IAAQ;AAAA,IAAG,CAAA,CAAA,MAAQ;AAAA,IAAoB;AAAA,EACjE,CAAA;AAEA,EAAA,MAAM,SAAA,GAAY,CAAC,OAAA,EAA6B,QAAA,KAA4C;AAC1F,IAAA,MAAM,MAAA,GAAS,QAAA,EAAU,MAAA,IAAU,uBAAA,CAAwB,QAAA,EAAU,OAAO,EAAE,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAW,CAAA;AACxG,IAAA,IAAI,CAAC,OAAO,KAAA,EAAO;AACjB,MAAA,SAAA,CAAU,sCAAsC,kBAAkB,CAAA;AAClE,MAAA;AAAA,IACF;AACA,IAAA,IAAI;AACF,MAAA,IAAI,CAAC,UAAU,OAAA,EAAS;AACtB,QAAA,OAAA,GAAU,KAAA,CAAM,OAAO,OAAO,CAAA;AAAA,MAChC;AAAA,IACF,SAAS,KAAA,EAAO;AACZ,MAAA,MAAA,CAAO,gBAAA,EAAiB;AACxB,MAAA,IAAI,KAAA,YAAiB,YAAA,IAAgB,KAAA,CAAM,IAAA,KAAS,mBAAA,EAAqB;AACvE,QAAA,SAAA,CAAU,oCAAoC,mBAAmB,CAAA;AAAA,MACnE,CAAA,MAAA,IAAW,KAAA,YAAiB,YAAA,IAAgB,KAAA,CAAM,SAAS,kBAAA,EAAoB;AAC7E,QAAA,SAAA,CAAU,mCAAmC,kBAAkB,CAAA;AAAA,MACjE,CAAA,MAAO,SAAA,CAAU,iCAAA,EAAmC,iBAAiB,CAAA;AACrE,MAAA;AAAA,IACJ;AACA,IAAA,IAAI;AAKF,MAAA,IAAI,OAAA,CAAQ,SAAS,iBAAA,IAAqB,OAAA,CAAQ,SAAS,mBAAA,IAAuB,OAAA,CAAQ,SAAS,mBAAA,EAAqB;AACxH,MAAA,IAAI,OAAA,CAAQ,SAAS,qBAAA,EAAuB;AAC1C,QAAA,IAAI,OAAO,KAAA,CAAM,MAAA,GAAS,GAAG,MAAM,cAAA,CAAe,oBAAoB,SAAS,CAAA;AAC/E,QAAA,MAAM,MAAA,GAAS,cAAc,OAAO,CAAA;AACpC,QAAA,IAAI,CAAC,OAAO,QAAA,IAAY,MAAA,CAAO,WAAW,mBAAA,EAAqB,SAAA,CAAU,oCAAoC,mBAAmB,CAAA;AAAA,aAAA,IACvH,CAAC,OAAO,QAAA,IAAY,MAAA,CAAO,WAAW,kBAAA,EAAoB,SAAA,CAAU,4BAA4B,kBAAkB,CAAA;AAC3H,QAAA;AAAA,MACF;AACA,MAAA,IAAI,OAAA,CAAQ,SAAS,kBAAA,EAAoB;AAAE,QAAA,MAAA,CAAO,gBAAA,EAAiB;AAAG,QAAA,UAAA,CAAW,QAAQ,OAAO,CAAA;AAAG,QAAA;AAAA,MAAQ;AAC3G,MAAA,IAAI,OAAA,CAAQ,SAAS,mBAAA,EAAqB;AACxC,QAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,GAAA,CAAI,OAAA,CAAQ,MAAM,CAAA;AACxC,QAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,SAAA,CAAU,iBAAA,KAAsB,QAAQ,iBAAA,EAAmB;AAAE,UAAA,MAAA,CAAO,gBAAA,EAAiB;AAAG,UAAA;AAAA,QAAQ;AACpH,QAAA,IAAI,KAAA,CAAM,SAAS,OAAA,EAAS;AAC1B,UAAA,IAAI,EAAE,YAAY,OAAA,CAAA,EAAU;AAAE,YAAA,MAAA,CAAO,gBAAA,EAAiB;AAAG,YAAA,WAAA,CAAY,KAAA,EAAO,cAAA,CAAe,iBAAA,EAAmB,SAAA,EAAW,UAAA,CAAW,MAAM,UAAA,EAAY,KAAA,CAAM,SAAS,CAAC,CAAC,CAAA;AAAG,YAAA;AAAA,UAAQ;AAClL,UAAA,IAAI;AACF,YAAA,MAAM,WAAW,eAAA,CAAgB,KAAA,CAAM,YAAY,OAAA,CAAQ,MAAA,EAAQ,YAAY,MAAM,CAAA;AACrF,YAAA,MAAA,CAAO,OAAA,EAAQ;AACf,YAAA,WAAA,CAAY,KAAA,EAAO,KAAA,CAAA,EAAW,QAAA,CAAS,KAAK,CAAA;AAAA,UAC9C,SAAS,KAAA,EAAO;AAAE,YAAA,WAAA,CAAY,KAAA,EAAO,KAAA,YAAiB,YAAA,GAAe,KAAA,GAAQ,cAAA,CAAe,4BAAA,EAA8B,SAAA,EAAW,UAAA,CAAW,KAAA,CAAM,UAAA,EAAY,KAAA,CAAM,SAAS,CAAC,CAAC,CAAA;AAAA,UAAG;AACtL,UAAA;AAAA,QACF;AACA,QAAA,MAAM,MAAA,GAAS,KAAA;AACf,QAAA,IAAI,aAAA,IAAiB,OAAA,IAAW,OAAA,CAAQ,WAAA,EAAa;AACnD,UAAA,IAAI,MAAA,CAAO,UAAU,SAAA,EAAW;AAAE,YAAA,MAAA,CAAO,gBAAA,EAAiB;AAAG,YAAA,eAAA,CAAgB,MAAA,EAAQ,cAAA,CAAe,iBAAA,EAAmB,SAAA,EAAW,UAAA,CAAW,MAAA,CAAO,UAAA,EAAY,MAAA,CAAO,SAAS,CAAC,CAAA,EAAG,IAAI,CAAA;AAAG,YAAA;AAAA,UAAQ;AACnM,UAAA,IAAI,MAAA,CAAO,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG;AAAE,YAAA,MAAA,CAAO,gBAAA,EAAiB;AAAG,YAAA,eAAA,CAAgB,MAAA,EAAQ,cAAA,CAAe,kBAAA,EAAoB,SAAA,EAAW,UAAA,CAAW,MAAA,CAAO,UAAA,EAAY,MAAA,CAAO,SAAS,CAAC,CAAA,EAAG,IAAI,CAAA;AAAG,YAAA;AAAA,UAAQ;AACjM,UAAA,MAAA,CAAO,KAAA,GAAQ,QAAA;AACf,UAAA,MAAA,CAAO,YAAA,GAAe,IAAA;AACtB,UAAA,IAAI,MAAA,CAAO,KAAA,KAAU,KAAA,CAAA,EAAW,YAAA,CAAa,OAAO,KAAK,CAAA;AACzD,UAAA,yBAAA,CAA0B,OAAO,WAAW,CAAA;AAC5C,UAAA,MAAA,CAAO,YAAA,EAAa;AACpB,UAAA,IAAA,EAAK;AACL,UAAA;AAAA,QACF;AACA,QAAA,IAAI,MAAA,IAAU,OAAA,IAAW,OAAA,CAAQ,IAAA,EAAM;AACrC,UAAA,IAAI,MAAA,CAAO,KAAA,KAAU,QAAA,IAAY,MAAA,CAAO,YAAA,EAAc;AAAE,YAAA,MAAA,CAAO,gBAAA,EAAiB;AAAG,YAAA,eAAA,CAAgB,MAAA,EAAQ,cAAA,CAAe,iBAAA,EAAmB,SAAA,EAAW,UAAA,CAAW,MAAA,CAAO,UAAA,EAAY,MAAA,CAAO,SAAS,CAAC,CAAA,EAAG,IAAI,CAAA;AAAG,YAAA;AAAA,UAAQ;AACzN,UAAA,IAAI,MAAA,CAAO,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG;AAAE,YAAA,MAAA,CAAO,gBAAA,EAAiB;AAAG,YAAA,eAAA,CAAgB,MAAA,EAAQ,cAAA,CAAe,kBAAA,EAAoB,SAAA,EAAW,UAAA,CAAW,MAAA,CAAO,UAAA,EAAY,MAAA,CAAO,SAAS,CAAC,CAAA,EAAG,IAAI,CAAA;AAAG,YAAA;AAAA,UAAQ;AACjM,UAAA,MAAA,CAAO,YAAA,GAAe,IAAA;AACtB,UAAA,MAAA,CAAO,KAAA,GAAQ,UAAA;AACf,UAAA,OAAA,CAAQ,MAAA,CAAO,OAAO,MAAM,CAAA;AAC5B,UAAA,wBAAA,CAAyB,OAAO,WAAW,CAAA;AAC3C,UAAA,yBAAA,CAA0B,OAAO,WAAW,CAAA;AAC5C,UAAA,MAAA,CAAO,OAAA,IAAU;AACjB,UAAA,cAAA,CAAe,MAAM,CAAA;AACrB,UAAA,WAAA,CAAY,MAAM,CAAA;AAClB,UAAA,IAAA,EAAK;AACL,UAAA;AAAA,QACF;AACA,QAAA,MAAA,CAAO,gBAAA,EAAiB;AACxB,QAAA,eAAA,CAAgB,MAAA,EAAQ,cAAA,CAAe,iBAAA,EAAmB,SAAA,EAAW,UAAA,CAAW,MAAA,CAAO,UAAA,EAAY,MAAA,CAAO,SAAS,CAAC,CAAA,EAAG,IAAI,CAAA;AAC3H,QAAA;AAAA,MACF;AACA,MAAA,IAAI,OAAA,CAAQ,SAAS,0BAAA,EAA4B;AAC/C,QAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,GAAA,CAAI,OAAA,CAAQ,MAAM,CAAA;AACxC,QAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,SAAA,CAAU,iBAAA,KAAsB,QAAQ,iBAAA,EAAmB;AAAE,UAAA,MAAA,CAAO,gBAAA,EAAiB;AAAG,UAAA;AAAA,QAAQ;AACpH,QAAA,MAAA,CAAO,gBAAA,EAAiB;AACxB,QAAA,MAAM,KAAA,GAAQ,cAAc,OAAO,CAAA;AACnC,QAAA,IAAI,MAAM,IAAA,KAAS,QAAA,EAAU,eAAA,CAAgB,KAAA,EAAwB,OAAO,KAAK,CAAA;AAAA,aAC5E,WAAA,CAAY,OAAO,KAAK,CAAA;AAC7B,QAAA;AAAA,MACF;AACA,MAAA,IAAI,OAAA,CAAQ,SAAS,iBAAA,EAAmB;AACtC,QAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,GAAA,CAAI,OAAA,CAAQ,MAAM,CAAA;AACxC,QAAA,IAAI,CAAC,SAAS,KAAA,CAAM,IAAA,KAAS,YAAY,KAAA,CAAM,SAAA,CAAU,iBAAA,KAAsB,OAAA,CAAQ,iBAAA,EAAmB;AAAE,UAAA,MAAA,CAAO,gBAAA,EAAiB;AAAG,UAAA;AAAA,QAAQ;AAC/I,QAAA,MAAM,MAAA,GAAS,KAAA;AACf,QAAA,IAAI,MAAA,CAAO,KAAA,KAAU,QAAA,IAAY,MAAA,CAAO,YAAA,EAAc;AAAE,UAAA,MAAA,CAAO,gBAAA,EAAiB;AAAG,UAAA,eAAA,CAAgB,MAAA,EAAQ,cAAA,CAAe,iBAAA,EAAmB,SAAA,EAAW,UAAA,CAAW,MAAA,CAAO,UAAA,EAAY,MAAA,CAAO,SAAS,CAAC,CAAA,EAAG,IAAI,CAAA;AAAG,UAAA;AAAA,QAAQ;AACzN,QAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AAAE,UAAA,MAAA,CAAO,gBAAA,EAAiB;AAAG,UAAA,eAAA,CAAgB,MAAA,EAAQ,cAAA,CAAe,iBAAA,EAAmB,SAAA,EAAW,UAAA,CAAW,MAAA,CAAO,UAAA,EAAY,MAAA,CAAO,SAAS,CAAC,CAAA,EAAG,IAAI,CAAA;AAAG,UAAA;AAAA,QAAQ;AAC1L,QAAA,IAAI,OAAA,CAAQ,QAAA,KAAa,MAAA,CAAO,QAAA,EAAU;AAAE,UAAA,MAAA,CAAO,gBAAA,EAAiB;AAAG,UAAA,eAAA,CAAgB,MAAA,EAAQ,cAAA,CAAe,iBAAA,EAAmB,SAAA,EAAW,UAAA,CAAW,MAAA,CAAO,UAAA,EAAY,MAAA,CAAO,SAAS,CAAC,CAAA,EAAG,IAAI,CAAA;AAAG,UAAA;AAAA,QAAQ;AAC7M,QAAA,IAAI,QAAA;AACJ,QAAA,IAAI;AAAE,UAAA,QAAA,GAAW,gBAAgB,MAAA,CAAO,UAAA,EAAY,OAAA,CAAQ,IAAA,EAAM,QAAQ,MAAM,CAAA;AAAA,QAAG,SAC5E,KAAA,EAAO;AAAE,UAAA,eAAA,CAAgB,MAAA,EAAQ,KAAA,YAAiB,YAAA,GAAe,KAAA,GAAQ,eAAe,4BAAA,EAA8B,SAAA,EAAW,UAAA,CAAW,MAAA,CAAO,UAAA,EAAY,MAAA,CAAO,SAAS,CAAC,GAAG,IAAI,CAAA;AAAG,UAAA;AAAA,QAAQ;AACzM,QAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAM,GAAI,QAAA;AACzB,QAAA,IAAI,wBAAA,GAA2B,MAAA,CAAO,8BAAA,GAAiC,KAAA,CAAM,eACxE,MAAA,CAAO,oBAAA,GAAuB,MAAA,CAAO,iCAAA,GAAoC,MAAM,WAAA,IAC/E,MAAA,CAAO,KAAA,CAAM,MAAA,IAAU,OAAO,MAAA,EAAQ;AAAE,UAAA,MAAA,CAAO,gBAAA,EAAiB;AAAG,UAAA,eAAA,CAAgB,MAAA,EAAQ,cAAA,CAAe,yBAAA,EAA2B,SAAA,EAAW,UAAA,CAAW,MAAA,CAAO,UAAA,EAAY,MAAA,CAAO,SAAS,CAAC,CAAA,EAAG,IAAI,CAAA;AAAG,UAAA;AAAA,QAAQ;AACtN,QAAA,MAAA,CAAO,MAAA,IAAU,CAAA;AACjB,QAAA,MAAA,CAAO,QAAA,IAAY,CAAA;AACnB,QAAA,MAAA,CAAO,KAAA,CAAM,KAAK,EAAE,KAAA,EAAO,QAAQ,WAAA,EAAa,KAAA,CAAM,aAAa,CAAA;AACnE,QAAA,wBAAA,IAA4B,KAAA,CAAM,WAAA;AAClC,QAAA,MAAA,CAAO,wBAAwB,KAAA,CAAM,WAAA;AACrC,QAAA,WAAA,CAAY,MAAM,CAAA;AAClB,QAAA;AAAA,MACF;AACA,MAAA,MAAA,CAAO,gBAAA,EAAiB;AAAA,IAC1B,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,gBAAA,EAAiB;AACxB,MAAA,IAAI,iBAAiB,YAAA,IAAgB,KAAA,CAAM,SAAS,mBAAA,EAAqB,SAAA,CAAU,oCAAoC,mBAAmB,CAAA;AAAA,WAAA,IACjI,iBAAiB,YAAA,IAAgB,KAAA,CAAM,SAAS,kBAAA,EAAoB,SAAA,CAAU,mCAAmC,kBAAkB,CAAA;AAAA,WAAA,IACnI,iBAAiB,YAAA,IAAgB,KAAA,CAAM,SAAS,kBAAA,EAAoB,SAAA,CAAU,mCAAmC,kBAAkB,CAAA;AAAA,WACvI,SAAA,CAAU,mCAAmC,iBAAiB,CAAA;AAAA,IACrE;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkB,OAAA,CAAQ,SAAA,CAAU,SAAA,CAAU,CAAC,SAAS,QAAA,KAAa,SAAA,CAAU,OAAA,EAAS,QAAQ,CAAC,CAAA;AACvG,EAAA,MAAM,uBAAuB,OAAA,CAAQ,SAAA,CAAU,cAAA,GAAiB,CAAC,OAAO,QAAA,KAAa;AACnF,IAAA,QAAA,EAAU,QAAQ,gBAAA,EAAiB;AACnC,IAAA,IAAI,iBAAiB,YAAA,IAAgB,KAAA,CAAM,SAAS,mBAAA,EAAqB,SAAA,CAAU,oCAAoC,mBAAmB,CAAA;AAAA,SAAA,IACjI,iBAAiB,YAAA,IAAgB,KAAA,CAAM,SAAS,kBAAA,EAAoB,SAAA,CAAU,sCAAsC,kBAAkB,CAAA;AAAA,SAC1I,SAAA,CAAU,mCAAmC,iBAAiB,CAAA;AAAA,EACrE,CAAC,CAAA;AAED,EAAA,SAAS,cAAc,QAAA,EAAgD;AACrE,IAAA,IAAI,UAAU,OAAO,EAAE,QAAA,EAAU,KAAA,EAAO,QAAQ,UAAA,EAAW;AAC3D,IAAA,IAAI,CAAC,QAAA,IAAY,OAAO,QAAA,KAAa,QAAA,SAAiB,EAAE,QAAA,EAAU,KAAA,EAAO,MAAA,EAAQ,kBAAA,EAAmB;AACpG,IAAA,IAAI,QAAA,CAAS,oBAAoB,wBAAA,EAA0B,OAAO,EAAE,QAAA,EAAU,KAAA,EAAO,QAAQ,mBAAA,EAAoB;AACjH,IAAA,IAAI;AACF,MAAA,IAAI,QAAA,CAAS,KAAA,CAAM,MAAA,GAAS,MAAA,CAAO,oBAAoB,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,MAAA,CAAO,qBAAqB,OAAO,EAAE,QAAA,EAAU,KAAA,EAAO,QAAQ,kBAAA,EAAmB;AACnK,MAAA,KAAA,CAAM,OAAO,EAAE,GAAG,QAAA,EAAU,IAAA,EAAM,uBAAuB,CAAA;AACzD,MAAA,WAAA,CAAY,UAAU,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAU,MAAA,CAAO,aAAa,QAAA,EAAU,MAAA,CAAO,aAAa,QAAA,EAAU,MAAA,CAAO,aAAa,cAAA,EAAgB,MAAA,CAAO,uBAAsB,EAAG,KAAA,EAAO,WAAW,CAAA;AAAA,IAChM,CAAA,CAAA,MAAQ;AAAE,MAAA,OAAO,EAAE,QAAA,EAAU,KAAA,EAAO,MAAA,EAAQ,kBAAA,EAAmB;AAAA,IAAG;AAClE,IAAA,IAAI,OAAA,CAAQ,eAAA,KAAoB,MAAA,IAAa,QAAA,CAAS,SAAA,KAAc,OAAA,CAAQ,eAAA,EAAiB,OAAO,EAAE,QAAA,EAAU,KAAA,EAAO,MAAA,EAAQ,kBAAA,EAAmB;AAClJ,IAAA,IAAI,OAAA,CAAQ,iBAAA,KAAsB,MAAA,IAAa,QAAA,CAAS,WAAA,KAAgB,OAAA,CAAQ,iBAAA,EAAmB,OAAO,EAAE,QAAA,EAAU,KAAA,EAAO,MAAA,EAAQ,kBAAA,EAAmB;AACxJ,IAAA,IAAI,eAAA,KAAoB,MAAA,IAAa,QAAA,CAAS,SAAA,KAAc,eAAA,SAAwB,EAAE,QAAA,EAAU,KAAA,EAAO,MAAA,EAAQ,kBAAA,EAAmB;AAClI,IAAA,IAAI,iBAAA,KAAsB,MAAA,IAAa,QAAA,CAAS,WAAA,KAAgB,iBAAA,SAA0B,EAAE,QAAA,EAAU,KAAA,EAAO,MAAA,EAAQ,kBAAA,EAAmB;AACxI,IAAA,IAAI,WAAA;AACJ,IAAA,IAAI;AAAE,MAAA,WAAA,GAAc,IAAA,CAAK,UAAU,QAAQ,CAAA;AAAA,IAAG,CAAA,CAAA,MAAQ;AAAE,MAAA,OAAO,EAAE,QAAA,EAAU,KAAA,EAAO,MAAA,EAAQ,kBAAA,EAAmB;AAAA,IAAG;AAChH,IAAA,IAAI,4BAA4B,MAAA,IAAa,uBAAA,KAA4B,SAAS,iBAAA,IAAqB,QAAA,CAAS,YAAY,QAAA,EAAU;AAIpI,MAAA,IAAI,QAAA,CAAS,QAAA,KAAa,QAAA,IAAY,WAAA,KAAgB,4BAA4B,OAAO,EAAE,QAAA,EAAU,IAAA,EAAM,KAAA,EAAO,YAAA,KAAiB,UAAA,GAAa,OAAA,GAAU,cAAc,QAAA,EAAS;AACjL,MAAA,OAAO,EAAE,QAAA,EAAU,KAAA,EAAO,QAAQ,gBAAA,EAAkB,gBAAA,EAAkB,SAAS,QAAA,EAAS;AAAA,IAC1F;AACA,IAAA,MAAM,WAA+B,EAAC;AACtC,IAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,IAAA,IAAI;AACF,MAAA,KAAA,MAAW,WAAW,QAAA,CAAS,KAAA,KAAU,UAAU,QAAA,CAAS,QAAA,GAAW,EAAC,EAAG;AACzE,QAAA,MAAM,GAAA,GAAM,WAAW,OAAO,CAAA;AAC9B,QAAA,IAAI,IAAA,CAAK,IAAI,GAAG,CAAA,SAAU,EAAE,QAAA,EAAU,KAAA,EAAO,MAAA,EAAQ,kBAAA,EAAmB;AACxE,QAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AACZ,QAAA,QAAA,CAAS,IAAA,CAAK,OAAO,MAAA,CAAO,EAAE,MAAM,OAAA,CAAQ,IAAA,EAAM,YAAA,EAAc,OAAA,CAAQ,YAAA,EAAc,eAAA,EAAiB,QAAQ,eAAA,EAAiB,OAAA,EAAS,QAAA,CAAS,WAAA,EAAa,iBAAA,EAAmB,QAAA,CAAS,mBAAmB,iBAAA,EAAmB,OAAA,CAAQ,iBAAA,EAAmB,UAAA,EAAY,qBAAA,CAAsB,OAAA,CAAQ,UAAU,CAAA,EAAG,GAAI,QAAQ,OAAA,KAAY,KAAA,CAAA,GAAY,EAAE,OAAA,EAAS,OAAA,CAAQ,OAAA,EAAQ,GAAI,EAAC,EAAI,GAAI,OAAA,CAAQ,qBAAA,KAA0B,KAAA,CAAA,GAAY,EAAE,qBAAA,EAAuB,OAAA,CAAQ,uBAAsB,GAAI,EAAC,EAAI,CAAC,CAAA;AAAA,MAChf;AAAA,IACF,CAAA,CAAA,MAAQ;AAAE,MAAA,OAAO,EAAE,QAAA,EAAU,KAAA,EAAO,MAAA,EAAQ,kBAAA,EAAmB;AAAA,IAAG;AAClE,IAAA,MAAM,UAAA,GAAa,uBAAA,KAA4B,MAAA,IAAa,uBAAA,KAA4B,QAAA,CAAS,iBAAA;AAKjG,IAAA,MAAM,QAAA,GAAW,CAAC,UAAA,IAAc,uBAAA,KAA4B,SAAS,iBAAA,IAChE,eAAA,CAAgB,IAAA,CAAK,CAAC,OAAA,KAAY;AACnC,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,IAAA,CAAK,CAAC,OAAA,KAAY,WAAW,OAAO,CAAA,KAAM,UAAA,CAAW,OAAO,CAAC,CAAA;AACnF,MAAA,OAAO,IAAA,KAAS,MAAA,IAAa,IAAA,CAAK,iBAAA,KAAsB,OAAA,CAAQ,iBAAA;AAAA,IAClE,CAAC,CAAA;AACH,IAAA,IAAI,UAAA,IAAc,QAAA,EAAU,UAAA,CAAW,UAAA,GAAa,oCAAoC,0CAA0C,CAAA;AAClI,IAAA,IAAI,CAAC,UAAA,IAAc,CAAC,QAAA,EAAU;AAC5B,MAAA,KAAA,MAAW,KAAA,IAAS,OAAA,CAAQ,MAAA,EAAO,EAAG;AACpC,QAAA,IAAI,MAAM,KAAA,IAAS,CAAC,SAAS,IAAA,CAAK,CAAC,YAAY,UAAA,CAAW,OAAO,MAAM,UAAA,CAAW,KAAA,CAAM,KAAyB,CAAA,IAAK,OAAA,CAAQ,sBAAsB,KAAA,CAAM,KAAA,EAAO,iBAAiB,CAAA,EAAG;AACnL,UAAA,WAAA,CAAY,OAAO,6CAA6C,CAAA;AAAA,QAClE;AAAA,MACF;AAAA,IACF;AACA,IAAA,eAAA,GAAkB,QAAA,CAAS,SAAA;AAC3B,IAAA,iBAAA,GAAoB,QAAA,CAAS,WAAA;AAC7B,IAAA,uBAAA,GAA0B,QAAA,CAAS,iBAAA;AACnC,IAAA,QAAA,GAAW,QAAA,CAAS,QAAA;AACpB,IAAA,0BAAA,GAA6B,WAAA;AAC7B,IAAA,eAAA,GAAkB,MAAA,CAAO,OAAO,QAAQ,CAAA;AACxC,IAAA,YAAA,GAAe,QAAA,CAAS,KAAA,KAAU,OAAA,GAAU,OAAA,GAAU,QAAA,CAAS,KAAA,KAAU,UAAA,GAAa,OAAA,GAAU,QAAA,CAAS,KAAA,KAAU,UAAA,GAAa,UAAA,GAAa,OAAA;AAC7I,IAAA,IAAI,YAAA,KAAiB,OAAA,IAAW,QAAA,CAAS,KAAA,KAAU,YAAY,KAAA,MAAW,KAAA,IAAS,OAAA,CAAQ,MAAA,IAAU,WAAA,CAAY,KAAA,EAAO,CAAA,kBAAA,EAAqB,QAAA,CAAS,KAAK,CAAA,CAAE,CAAA;AAC7J,IAAA,IAAA,EAAK;AACL,IAAA,OAAO,EAAE,UAAU,IAAA,EAAM,KAAA,EAAO,iBAAiB,UAAA,GAAa,OAAA,GAAU,cAAc,QAAA,EAAS;AAAA,EACjG;AAEA,EAAA,MAAM,MAAA,GAA8I;AAAA,IAClJ,IAAI,KAAA,GAAQ;AAAE,MAAA,OAAO,YAAA;AAAA,IAAc,CAAA;AAAA,IACnC,IAAI,iBAAA,GAAoB;AAAE,MAAA,OAAO,uBAAA;AAAA,IAAyB,CAAA;AAAA,IAC1D,IAAI,WAAA,GAAc;AAAE,MAAA,OAAO,iBAAA;AAAA,IAAmB,CAAA;AAAA,IAC9C,SAAA,CAAsC,YAAe,KAAA,EAA6C;AAChG,MAAA,MAAM,GAAA,GAAM,CAAA,EAAG,UAAA,CAAW,IAAI,KAAS,UAAA,CAAW,EAAE,CAAA,EAAA,EAAS,UAAA,CAAW,OAAO,CAAA,EAAA,EAAS,KAAA,EAAO,QAAA,CAAS,WAAW,MAAM,CAAA,CAAA;AACzH,MAAA,IAAI,KAAA,GAAQ,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AAC3B,MAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,OAAA,EAAS;AAC3B,QAAA,KAAA,GAAQ,EAAE,YAAY,KAAA,EAAO,QAAA,EAAU,KAAK,OAAA,EAAS,KAAA,EAAO,QAAQ,6BAAA,EAA8B;AAClG,QAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,KAAK,CAAA;AACtB,QAAA,KAAA,EAAO,SAAS,CAAC,MAAA,KAAW,WAAA,CAAY,KAAA,EAAsB,MAAM,CAAC,CAAA;AAAA,MACvE;AACA,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AAC9B,MAAA,IAAI,MAAA,IAAU,CAAC,KAAA,CAAM,OAAA,EAAS,OAAO,MAAA;AACrC,MAAA,MAAM,MAAA,GAAS,UAAA,CAAW,IAAA,KAAS,KAAA,GAC/B,EAAE,IAAA,EAAM,CAAC,OAAA,EAAkB,cAAA,KAAoC,IAAA,CAAK,KAAA,EAAsB,OAAA,EAAS,cAAA,IAAkB,EAAE,CAAA,EAAE,GACzH,EAAE,SAAA,EAAW,CAAC,OAAA,EAAkB,mBAAA,KAAyD,SAAA,CAAU,KAAA,EAAsB,OAAA,EAAS,mBAAmB,CAAA,EAAE;AAC3J,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,MAAuD,CAAA;AACxE,MAAA,OAAO,MAAA;AAAA,IACT,CAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA,CAAW,SAAS,sBAAA,EAAwB;AAAE,MAAA,UAAA,CAAW,MAAM,CAAA;AAAG,MAAA,YAAA,GAAe,OAAA;AAAA,IAAS,CAAA;AAAA,IAC1F,OAAA,CAAQ,SAAS,yBAAA,EAA2B;AAAE,MAAA,IAAI,QAAA,EAAU;AAAQ,MAAA,QAAA,GAAW,IAAA;AAAM,MAAA,UAAA,CAAW,MAAM,CAAA;AAAG,MAAA,eAAA,EAAgB;AAAG,MAAA,oBAAA,IAAuB;AAAG,MAAA,OAAA,CAAQ,UAAU,KAAA,IAAQ;AAAG,MAAA,YAAA,GAAe,UAAA;AAAY,MAAA,IAAA,EAAK;AAAA,IAAG,CAAA;AAAA,IACtN,UAAU,QAAA,EAAU;AAAE,MAAA,SAAA,CAAU,IAAI,QAAQ,CAAA;AAAG,MAAA,OAAO,MAAM,SAAA,CAAU,MAAA,CAAO,QAAQ,CAAA;AAAA,IAAG,CAAA;AAAA,IACxF,QAAA,GAAW;AAAE,MAAA,OAAO,eAAA;AAAA,IAAiB,CAAA;AAAA,IACrC,IAAI,gBAAA,GAAmB;AAAE,MAAA,OAAO,YAAA;AAAA,IAAc,CAAA;AAAA,IAC9C,IAAI,iBAAA,GAAoB;AAAE,MAAA,OAAO,CAAC,GAAG,OAAA,CAAQ,MAAA,EAAQ,CAAA,CAAE,MAAA,CAAO,CAAC,KAAA,KAAU,MAAM,KAAA,KAAU,SAAA,IAAa,KAAA,CAAM,KAAA,KAAU,QAAQ,CAAA,CAAE,MAAA;AAAA,IAAQ,CAAA;AAAA,IACxI,IAAI,oBAAA,GAAuB;AAAE,MAAA,OAAO,MAAA,CAAO,oBAAA;AAAA,IAAsB;AAAA,GACnE;AACA,EAAA,OAAO,MAAA;AACT;AAGO,SAAS,qBAAA,CAAsB,KAAA,EAAgB,QAAA,EAA+C,MAAA,EAAsD;AACzJ,EAAA,OAAO,oBAAA,CAAqB,OAAO,QAAA,EAAU,EAAE,QAAQ,MAAA,IAAU,sBAAA,EAAwB,KAAA,EAAO,UAAA,EAAY,CAAA;AAC9G;;;AC5/BO,SAAS,iCAAA,CAAkC,IAAA,EAAuB,OAAA,GAAoD,EAAC,EAAqB;AACjJ,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAA8E;AACpG,EAAA,MAAM,cAAA,uBAAqB,GAAA,EAAiE;AAC5F,EAAA,MAAM,QAAQ,yBAAA,EAA0B;AACxC,EAAA,MAAM,MAAA,GAAS,sBAAA,CAAuB,OAAA,CAAQ,MAAM,CAAA;AACpD,EAAA,MAAM,SAAA,GAAY,CAAC,KAAA,KAA8B;AAC/C,IAAA,MAAM,MAAA,GAAS,uBAAA,CAAwB,KAAA,CAAM,KAAA,IAAS,IAAI,EAAE,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAW,CAAA;AACtF,IAAA,MAAM,QAAA,GAAmC,OAAO,MAAA,CAAO;AAAA,MACrD,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,MAAA;AAAA,MACA,OAAA,EAAS;AAAA,KACV,CAAA;AACD,IAAA,IAAI,CAAC,OAAO,KAAA,EAAO;AACjB,MAAA,MAAM,KAAA,GAAQ,IAAI,YAAA,CAAa,kBAAA,EAAoB,sCAAsC,SAAS,CAAA;AAClG,MAAA,KAAA,MAAW,QAAA,IAAY,CAAC,GAAG,cAAc,CAAA,EAAG;AAC1C,QAAA,IAAI;AAAE,UAAA,QAAA,CAAS,OAAO,QAAQ,CAAA;AAAA,QAAG,CAAA,CAAA,MAAQ;AAAA,QAA2B;AAAA,MACtE;AACA,MAAA;AAAA,IACF;AACA,IAAA,IAAI,OAAA;AACJ,IAAA,IAAI;AAAE,MAAA,OAAA,GAAU,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAAA,IAAG,SACnC,KAAA,EAAO;AACZ,MAAA,MAAA,CAAO,gBAAA,EAAiB;AACxB,MAAA,KAAA,MAAW,QAAA,IAAY,CAAC,GAAG,cAAc,CAAA,EAAG;AAC1C,QAAA,IAAI;AAAE,UAAA,QAAA,CAAS,OAAO,QAAQ,CAAA;AAAA,QAAG,CAAA,CAAA,MAAQ;AAAA,QAA2B;AAAA,MACtE;AACA,MAAA;AAAA,IACF;AACA,IAAA,KAAA,MAAW,QAAA,IAAY,CAAC,GAAG,SAAS,CAAA,EAAG;AACrC,MAAA,IAAI;AAAE,QAAA,QAAA,CAAS,SAAS,QAAQ,CAAA;AAAA,MAAG,CAAA,CAAA,MAAQ;AAAA,MAA2B;AAAA,IACxE;AAAA,EACF,CAAA;AACA,EAAA,IAAA,CAAK,gBAAA,CAAiB,WAAW,SAAS,CAAA;AAC1C,EAAA,IAAA,CAAK,KAAA,IAAQ;AACb,EAAA,IAAI,MAAA,GAAS,KAAA;AACb,EAAA,OAAO;AAAA,IACL,IAAA,CAAK,SAAS,QAAA,EAAU;AACtB,MAAA,IAAI,MAAA,EAAQ,MAAM,IAAI,KAAA,CAAM,iCAAiC,CAAA;AAC7D,MAAA,IAAA,CAAK,WAAA,CAAY,SAAS,QAAQ,CAAA;AAAA,IACpC,CAAA;AAAA,IACA,UAAU,QAAA,EAAU;AAAE,MAAA,SAAA,CAAU,IAAI,QAAQ,CAAA;AAAG,MAAA,OAAO,MAAM,SAAA,CAAU,MAAA,CAAO,QAAQ,CAAA;AAAA,IAAG,CAAA;AAAA,IACxF,eAAe,QAAA,EAAU;AAAE,MAAA,cAAA,CAAe,IAAI,QAAQ,CAAA;AAAG,MAAA,OAAO,MAAM,cAAA,CAAe,MAAA,CAAO,QAAQ,CAAA;AAAA,IAAG,CAAA;AAAA,IACvG,KAAA,GAAQ;AAAE,MAAA,IAAI,MAAA,EAAQ;AAAQ,MAAA,MAAA,GAAS,IAAA;AAAM,MAAA,IAAA,CAAK,mBAAA,CAAoB,WAAW,SAAS,CAAA;AAAG,MAAA,IAAA,CAAK,KAAA,IAAQ;AAAG,MAAA,SAAA,CAAU,KAAA,EAAM;AAAG,MAAA,cAAA,CAAe,KAAA,EAAM;AAAA,IAAG;AAAA,GAC1J;AACF;;;ACuDA,SAAS,aAAA,CAAc,OAAgB,QAAA,EAA0B;AAC/D,EAAA,OAAO,KAAA,YAAiB,YAAA,GAAe,KAAA,CAAM,IAAA,GAAO,QAAA;AACtD;AAEA,SAAS,KAAK,SAAA,EAA6B,KAAA,EAAqD,OAAA,EAA6B,QAAA,GAAoC,EAAC,EAAY;AAC5K,EAAA,IAAI;AAAE,IAAA,SAAA,CAAU,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,OAAO,GAAG,QAAQ,CAAA;AAAG,IAAA,OAAO,IAAA;AAAA,EAAM,CAAA,CAAA,MAAQ;AAAE,IAAA,OAAO,KAAA;AAAA,EAAO;AAC9F;AAEA,SAAS,iBAAiB,IAAA,EAAsB;AAC9C,EAAA,MAAM,QAAA,GAAmC;AAAA,IACvC,sBAAA,EAAwB,2BAAA;AAAA,IACxB,iBAAA,EAAmB,iCAAA;AAAA,IACnB,aAAA,EAAe,mCAAA;AAAA,IACf,yBAAA,EAA2B,sCAAA;AAAA,IAC3B,0BAAA,EAA4B,uCAAA;AAAA,IAC5B,oBAAA,EAAsB,2CAAA;AAAA,IACtB,qBAAA,EAAuB,4CAAA;AAAA,IACvB,gBAAA,EAAkB,4CAAA;AAAA,IAClB,cAAA,EAAgB,oCAAA;AAAA,IAChB,YAAA,EAAc,2BAAA;AAAA,IACd,iBAAA,EAAmB,+BAAA;AAAA,IACnB,eAAA,EAAiB,iCAAA;AAAA,IACjB,qBAAA,EAAuB,kCAAA;AAAA,IACvB,eAAA,EAAiB,sCAAA;AAAA,IACjB,uBAAA,EAAyB,iCAAA;AAAA,IACzB,eAAA,EAAiB;AAAA,GACnB;AACA,EAAA,OAAO,QAAA,CAAS,IAAI,CAAA,IAAK,oCAAA;AAC3B;AAGO,SAAS,iCAAiC,OAAA,EAO/C;AACA,EAAA,MAAM,QAAQ,yBAAA,EAA0B;AACxC,EAAA,MAAM,MAAA,GAAS,sBAAA,CAAuB,OAAA,CAAQ,MAAM,CAAA;AACpD,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAA,IAAU,mBAAA,CAAoB,MAAM,CAAA;AAC3D,EAAA,MAAM,mBAAA,GAAsB,OAAA,CAAQ,SAAA,KAAc,OAAA,CAAQ,IAAA,GAAO,iCAAA,CAAkC,OAAA,CAAQ,IAAA,EAAM,EAAE,MAAA,EAAQ,CAAA,GAAI,MAAA,CAAA;AAC/H,EAAA,IAAI,CAAC,mBAAA,EAAqB,MAAM,IAAI,UAAU,yDAAyD,CAAA;AACvG,EAAA,MAAM,SAAA,GAA8B,mBAAA;AACpC,EAAA,MAAM,WAAA,uBAAkB,GAAA,EAAwB;AAChD,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAyB;AAC7C,EAAA,MAAM,cAAA,uBAAqB,GAAA,EAAwB;AACnD,EAAA,IAAI,wBAAA,GAA2B,CAAA;AAC/B,EAAA,IAAI,QAAA,GAAW,KAAA;AAEf,EAAA,MAAM,UAAA,GAAa,CAAC,OAAA,KAA8D,OAAA,CAAQ,QAAA,EAAS,CAAE,IAAA,CAAK,CAAC,OAAA,KACzG,OAAA,CAAQ,IAAA,MAAU,OAAA,CAAQ,IAAA,KAAS,QAAA,GAAW,QAAA,GAAW,KAAA,CAAA,IACpD,OAAA,CAAQ,YAAA,KAAiB,OAAA,CAAQ,YAAA,IACjC,OAAA,CAAQ,eAAA,KAAoB,OAAA,CAAQ,eAAA,IACpC,OAAA,CAAQ,iBAAA,KAAsB,OAAA,CAAQ,iBAC5C,CAAA;AAED,EAAA,MAAM,gBAAA,GAAmB,CAAC,OAAA,KAA4E;AAKpG,IAAA,MAAM,eAAA,GAAkB,QAAQ,QAAA,EAAS,CAAE,KAAK,CAAC,OAAA,KAC/C,QAAQ,IAAA,MAAU,OAAA,CAAQ,SAAS,QAAA,GAAW,QAAA,GAAW,UACpD,OAAA,CAAQ,YAAA,KAAiB,QAAQ,YAAA,IACjC,OAAA,CAAQ,eAAA,KAAoB,OAAA,CAAQ,eAC1C,CAAA;AACD,IAAA,OAAO,kBAAkB,eAAA,GAAkB,wBAAA;AAAA,EAC7C,CAAA;AAEA,EAAA,MAAM,SAAA,GAAY,CAAC,IAAA,EAA0B,IAAA,EAAc,KAAA,KAAsF;AAC/I,IAAA,IAAA,CAAK,WAAW,KAAA,EAAO;AAAA,MACrB,IAAA,EAAM,0BAAA;AAAA,MACN,eAAA,EAAiB,wBAAA;AAAA,MACjB,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,mBAAmB,IAAA,CAAK,iBAAA;AAAA,MACxB,OAAO,EAAE,IAAA,EAAM,SAAS,gBAAA,CAAiB,IAAI,GAAG,KAAA;AAAM,KACvD,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,MAAA,KAA6B;AACrD,IAAA,IAAI,OAAO,iBAAA,EAAmB;AAC9B,IAAA,MAAA,CAAO,iBAAA,GAAoB,IAAA;AAC3B,IAAA,IAAI,cAAA,CAAe,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,KAAM,MAAA,EAAQ,cAAA,CAAe,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA;AAC/F,IAAA,MAAA,CAAO,oBAAA,EAAqB;AAC5B,IAAA,wBAAA,GAA2B,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,wBAAA,GAA2B,OAAO,YAAY,CAAA;AACrF,IAAA,MAAA,CAAO,uBAAuB,IAAA,CAAK,GAAA,CAAI,GAAG,MAAA,CAAO,oBAAA,GAAuB,OAAO,YAAY,CAAA;AAC3F,IAAA,MAAA,CAAO,gBAAA,IAAmB;AAC1B,IAAA,MAAA,CAAO,gBAAA,GAAmB,MAAA;AAAA,EAC5B,CAAA;AAEA,EAAA,MAAM,wBAAA,GAA2B,CAAC,MAAA,KAA6B;AAC7D,IAAA,IAAI,CAAC,OAAO,cAAA,EAAgB;AAC5B,IAAA,MAAA,CAAO,cAAA,GAAiB,KAAA;AACxB,IAAA,MAAA,CAAO,gBAAgB,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,MAAA,CAAO,gBAAgB,CAAC,CAAA;AAAA,EAC7D,CAAA;AAEA,EAAA,MAAM,cAAA,GAAiB,CAAC,MAAA,KAA6B;AACnD,IAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACrB,IAAA,MAAA,CAAO,OAAA,GAAU,KAAA;AACjB,IAAA,IAAI,WAAA,CAAY,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,KAAM,MAAA,EAAQ,WAAA,CAAY,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA;AACzF,IAAA,IAAI,MAAA,CAAO,kBAAkB,MAAA,EAAW;AAAE,MAAA,YAAA,CAAa,OAAO,aAAa,CAAA;AAAG,MAAA,MAAA,CAAO,aAAA,GAAgB,MAAA;AAAA,IAAW;AAChH,IAAA,MAAA,CAAO,eAAe,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,MAAA,CAAO,eAAe,CAAC,CAAA;AAAA,EAC3D,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,MAAA,KAA6B;AAClD,IAAA,cAAA,CAAe,MAAM,CAAA;AAAA,EACvB,CAAA;AAEA,EAAA,MAAM,2BAAA,GAA8B,CAAC,MAAA,KAA8B;AACjE,IAAA,IAAI,OAAO,QAAA,IAAY,MAAA,CAAO,UAAA,EAAY,gBAAA,CAAiB,OAAO,MAAM,CAAA;AAAA,EAC1E,CAAA;AAEA,EAAA,MAAM,cAAA,GAAiB,CAAC,MAAA,KAA8B;AACpD,IAAA,IAAI,OAAO,aAAA,EAAe;AAC1B,IAAA,MAAA,CAAO,aAAA,GAAgB,IAAA;AACvB,IAAA,MAAM,SAAA,GAAY,OAAO,QAAA,EAAU,MAAA;AACnC,IAAA,IAAI,CAAC,SAAA,EAAW;AAAE,MAAA,MAAA,CAAO,UAAA,GAAa,IAAA;AAAM,MAAA,2BAAA,CAA4B,MAAM,CAAA;AAAG,MAAA;AAAA,IAAQ;AACzF,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI;AAAE,MAAA,MAAA,GAAS,SAAA,CAAU,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA;AAAA,IAAG,CAAA,CAAA,MAC1C;AAAE,MAAA,MAAA,CAAO,UAAA,GAAa,IAAA;AAAM,MAAA,2BAAA,CAA4B,MAAM,CAAA;AAAG,MAAA;AAAA,IAAQ;AAC/E,IAAA,KAAK,OAAA,CAAQ,OAAA,CAAQ,MAAM,CAAA,CAAE,KAAK,MAAM;AACtC,MAAA,MAAA,CAAO,UAAA,GAAa,IAAA;AACpB,MAAA,2BAAA,CAA4B,MAAM,CAAA;AAAA,IACpC,GAAG,MAAM;AACP,MAAA,MAAA,CAAO,UAAA,GAAa,IAAA;AACpB,MAAA,2BAAA,CAA4B,MAAM,CAAA;AAAA,IACpC,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,MAAA,EAAqB,UAAA,GAAa,KAAA,KAAgB;AACrE,IAAA,IAAI,OAAO,MAAA,EAAQ;AACnB,IAAA,MAAA,CAAO,MAAA,GAAS,IAAA;AAChB,IAAA,MAAA,CAAO,OAAO,SAAA,GAAY,IAAA;AAC1B,IAAA,aAAA,CAAc,OAAO,MAAM,CAAA;AAC3B,IAAA,OAAA,CAAQ,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA;AACjC,IAAA,wBAAA,CAAyB,OAAO,MAAM,CAAA;AACtC,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,MAAA,CAAO,YAAA,GAAe,IAAA;AACtB,MAAA,MAAA,CAAO,UAAA,GAAa,IAAA;AACpB,MAAA,2BAAA,CAA4B,MAAM,CAAA;AAAA,IACpC,CAAA,MAAO;AAGL,MAAA,IAAI,CAAC,MAAA,CAAO,OAAA,EAAS,MAAA,CAAO,QAAA,GAAW,IAAA;AACvC,MAAA,cAAA,CAAe,MAAM,CAAA;AACrB,MAAA,2BAAA,CAA4B,MAAM,CAAA;AAAA,IACpC;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,OAAO,KAAA,KAAkC;AACjE,IAAA,IAAI;AACF,MAAA,IAAI,CAAC,KAAA,IAAS,OAAQ,MAAiC,MAAA,CAAO,aAAa,MAAM,UAAA,EAAY;AAC7F,MAAA,MAAM,QAAA,GAAY,KAAA,CAAiC,MAAA,CAAO,aAAa,CAAA,EAAE;AACzE,MAAA,MAAM,QAAQ,QAAA,CAAS,MAAA;AACvB,MAAA,IAAI,OAAO,MAAM,OAAA,CAAQ,QAAQ,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAC,CAAA;AAAA,IACvD,CAAA,CAAA,MAAQ;AAAA,IAGR;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,MAAA,EAAoB,SAAA,GAAY,mBAAA,KAA8B;AAClF,IAAA,IAAI,OAAO,SAAA,EAAW;AACtB,IAAA,MAAA,CAAO,gBAAA,GAAmB,IAAA;AAC1B,IAAA,MAAA,CAAO,SAAA,GAAY,IAAA;AACnB,IAAA,IAAI;AAAE,MAAA,MAAA,CAAO,WAAW,KAAA,EAAM;AAAA,IAAG,CAAA,CAAA,MAAQ;AAAA,IAAa;AACtD,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,KAAK,MAAM,CAAA;AAC7C,IAAA,IAAI,MAAA,cAAoB,MAAM,CAAA;AAAA,uBACX,MAAM,CAAA;AACpB,EACP,CAAA;AAEA,EAAA,MAAM,OAAA,GAAU,CAAC,YAAA,EAAsB,MAAA,KAA8C;AACnF,IAAA,IAAI,WAAA,CAAY,IAAA,IAAQ,MAAA,CAAO,sBAAA,IAA0B,OAAO,YAAA,IAAgB,MAAA,CAAO,yBAAA,EAA2B,OAAO,IAAI,YAAA,CAAa,yBAAA,EAA2B,gBAAA,CAAiB,yBAAyB,GAAG,UAAU,CAAA;AAC5N,IAAA,IAAI,cAAA,CAAe,IAAA,IAAQ,MAAA,CAAO,wBAAA,IAA4B,OAAO,cAAA,IAAkB,MAAA,CAAO,2BAAA,EAA6B,OAAO,IAAI,YAAA,CAAa,yBAAA,EAA2B,gBAAA,CAAiB,yBAAyB,GAAG,UAAU,CAAA;AACrO,IAAA,IAAI,WAAW,OAAA,CAAQ,IAAA,IAAQ,MAAA,CAAO,uBAAA,IAA2B,OAAO,aAAA,IAAiB,MAAA,CAAO,0BAAA,CAAA,EAA6B,OAAO,IAAI,YAAA,CAAa,yBAAA,EAA2B,gBAAA,CAAiB,yBAAyB,GAAG,UAAU,CAAA;AACvO,IAAA,IAAI,eAAe,MAAA,CAAO,qBAAA,IACrB,2BAA2B,MAAA,CAAO,8BAAA,GAAiC,gBACnE,MAAA,CAAO,oBAAA,GAAuB,OAAO,iCAAA,GAAoC,YAAA,SAAqB,IAAI,YAAA,CAAa,2BAA2B,gBAAA,CAAiB,yBAAyB,GAAG,UAAU,CAAA;AACtM,IAAA,MAAA,CAAO,YAAA,IAAgB,CAAA;AACvB,IAAA,IAAI,MAAA,SAAe,aAAA,IAAiB,CAAA;AACpC,IAAA,MAAA,CAAO,cAAA,IAAkB,CAAA;AACzB,IAAA,wBAAA,IAA4B,YAAA;AAC5B,IAAA,MAAA,CAAO,oBAAA,IAAwB,YAAA;AAC/B,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,cAAA,GAAiB,CAAC,IAAA,EAA0B,MAAA,KAAuE;AACvH,IAAA,IAAI;AAAE,MAAA,cAAA,CAAe,IAAA,CAAK,OAAA,EAAS,MAAA,EAAQ,SAAS,CAAA;AAAA,IAAG,SAAS,KAAA,EAAO;AAAE,MAAA,MAAA,CAAO,gBAAA,EAAiB;AAAG,MAAA,MAAM,KAAA;AAAA,IAAO;AACjH,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI;AAAE,MAAA,QAAA,GAAW,OAAA,CAAQ,iBAAiB,IAAA,EAAM,MAAM,KAAK,EAAE,KAAA,EAAO,KAAK,OAAA,EAAQ;AAAA,IAAG,SAC7E,KAAA,EAAO;AAAE,MAAA,MAAA,CAAO,gBAAA,EAAiB;AAAG,MAAA,MAAM,KAAA;AAAA,IAAO;AACxD,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI;AAAE,MAAA,QAAA,GAAW,oBAAA,CAAqB,SAAS,KAAA,EAAO,QAAA,CAAS,UAAU,EAAE,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAW,CAAA;AAAA,IAAG,SACjG,KAAA,EAAO;AAAE,MAAA,MAAA,CAAO,gBAAA,EAAiB;AAAG,MAAA,MAAM,KAAA;AAAA,IAAO;AACxD,IAAA,IAAI;AAAE,MAAA,qBAAA,CAAsB,QAAQ,QAAA,EAAU,EAAE,MAAA,EAAQ,KAAA,EAAO,WAAW,CAAA;AAAA,IAAG,SACtE,KAAA,EAAO;AAAE,MAAA,MAAA,CAAO,gBAAA,EAAiB;AAAG,MAAA,MAAM,KAAA;AAAA,IAAO;AACxD,IAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,QAAA,CAAS,KAAA,EAAO,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAU,MAAA,CAAO,WAAA,EAAa,QAAA,EAAU,MAAA,CAAO,WAAA,EAAa,QAAA,EAAU,MAAA,CAAO,WAAA,EAAa,cAAA,EAAgB,MAAA,CAAO,qBAAA,EAAsB,EAAG,aAAA,EAAe,IAAI,GAAA,CAAI,QAAQ,CAAA,EAAG,KAAA,EAAO,SAAA,EAAW,CAAA;AAIpP,IAAA,OAAO,EAAE,KAAA,EAAO,QAAA,CAAS,KAAA,EAAO,WAAA,EAAa,MAAM,WAAA,EAAY;AAAA,EACjE,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,QAAA,EAA2B,MAAA,KAAsF;AACtI,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,oBAAA,CAAqB,QAAA,CAAS,KAAA,EAAO,QAAA,CAAS,UAAU,EAAE,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAW,CAAA;AACrG,MAAA,IAAI,MAAA;AACJ,MAAA,WAAA,CAAY,QAAA,CAAS,KAAA,EAAO,EAAE,MAAA,EAAQ,EAAE,UAAU,MAAA,CAAO,WAAA,EAAa,QAAA,EAAU,MAAA,CAAO,WAAA,EAAa,QAAA,EAAU,OAAO,WAAA,EAAa,cAAA,EAAgB,MAAA,CAAO,qBAAA,EAAsB,EAAG,aAAA,EAAe,IAAI,GAAA,CAAI,QAAQ,CAAA,EAAG,KAAA,EAAO,SAAA,EAAW,CAAA;AACtO,MAAA,OAAO,EAAE,KAAA,EAAO,QAAA,CAAS,KAAA,EAAO,QAAA,EAAS;AAAA,IAC3C,SAAS,KAAA,EAAO;AAA8B,MAAA,MAAM,KAAA;AAAA,IAAO;AAAA,EAC7D,CAAA;AAEA,EAAA,MAAM,IAAA,GAAO,OAAO,KAAA,KAAsC;AACxD,IAAA,IAAI,MAAM,OAAA,IAAW,KAAA,CAAM,MAAA,IAAU,CAAC,MAAM,QAAA,EAAU;AACtD,IAAA,KAAA,CAAM,OAAA,GAAU,IAAA;AAChB,IAAA,IAAI;AACF,MAAA,OAAO,CAAC,MAAM,MAAA,IAAU,CAAC,MAAM,MAAA,CAAO,SAAA,IAAa,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG;AACnE,QAAA,IAAI,IAAA;AACJ,QAAA,IAAI;AAAE,UAAA,IAAA,GAAO,MAAM,KAAA,CAAM,QAAA,CAAS,IAAA,EAAK;AAAA,QAAG,SACnC,KAAA,EAAO;AACZ,UAAA,IAAI,CAAC,KAAA,CAAM,MAAA,IAAU,CAAC,MAAM,MAAA,CAAO,SAAA,EAAW,SAAA,CAAU,KAAA,CAAM,IAAA,EAAM,aAAA,CAAc,KAAA,EAAO,gBAAgB,GAAG,SAAS,CAAA;AACrH,UAAA,WAAA,CAAY,KAAK,CAAA;AACjB,UAAA;AAAA,QACF;AACA,QAAA,IAAI,KAAA,CAAM,MAAA,IAAU,KAAA,CAAM,MAAA,CAAO,SAAA,EAAW;AAC5C,QAAA,IAAI,KAAK,IAAA,EAAM;AACb,UAAA,KAAA,CAAM,YAAA,GAAe,IAAA;AACrB,UAAA,IAAI,IAAA,CAAK,WAAW,KAAA,EAAO,EAAE,MAAM,mBAAA,EAAqB,eAAA,EAAiB,wBAAA,EAA0B,MAAA,EAAQ,KAAA,CAAM,IAAA,CAAK,QAAQ,iBAAA,EAAmB,KAAA,CAAM,UAAU,iBAAA,EAAmB,IAAA,EAAM,MAAM,CAAA,EAAG,WAAA,CAAY,KAAA,EAAO,IAAI,CAAA;AAAA,eACrN;AAAE,YAAA,SAAA,CAAU,KAAA,CAAM,IAAA,EAAM,uBAAA,EAAyB,SAAS,CAAA;AAAG,YAAA,WAAA,CAAY,OAAO,IAAI,CAAA;AAAA,UAAG;AAC5F,UAAA;AAAA,QACF;AACA,QAAA,IAAI;AACF,UAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,WAAA,GAAc,IAAA,CAAK,KAAA,EAAO,KAAA,CAAM,IAAI,CAAA,IAAK,EAAE,KAAA,EAAO,IAAA,CAAK,KAAA,EAAM;AACtF,UAAA,MAAM,MAAA,GAAS,cAAc,QAAQ,CAAA;AACrC,UAAA,IAAI,CAAC,IAAA,CAAK,SAAA,EAAW,KAAA,EAAO,EAAE,IAAA,EAAM,iBAAA,EAAmB,eAAA,EAAiB,wBAAA,EAA0B,MAAA,EAAQ,KAAA,CAAM,IAAA,CAAK,MAAA,EAAQ,mBAAmB,KAAA,CAAM,SAAA,CAAU,iBAAA,EAAmB,QAAA,EAAU,KAAA,CAAM,QAAA,EAAU,IAAA,EAAM,MAAA,CAAO,KAAA,EAAM,EAAG,MAAA,CAAO,QAAQ,CAAA,EAAG;AACnP,YAAA,SAAA,CAAU,KAAA,CAAM,IAAA,EAAM,uBAAA,EAAyB,SAAS,CAAA;AACxD,YAAA,WAAA,CAAY,KAAK,CAAA;AACjB,YAAA;AAAA,UACF;AACA,UAAA,KAAA,CAAM,MAAA,IAAU,CAAA;AAChB,UAAA,KAAA,CAAM,QAAA,IAAY,CAAA;AAAA,QACpB,SAAS,KAAA,EAAO;AACd,UAAA,IAAI,CAAC,KAAA,CAAM,MAAA,IAAU,CAAC,MAAM,MAAA,CAAO,SAAA,EAAW,SAAA,CAAU,KAAA,CAAM,IAAA,EAAM,aAAA,CAAc,KAAA,EAAO,4BAA4B,GAAG,SAAS,CAAA;AACjI,UAAA,WAAA,CAAY,KAAK,CAAA;AACjB,UAAA;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA,SAAE;AACA,MAAA,KAAA,CAAM,OAAA,GAAU,KAAA;AAChB,MAAA,KAAA,CAAM,QAAA,GAAW,IAAA;AACjB,MAAA,2BAAA,CAA4B,KAAK,CAAA;AAAA,IACnC;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,SAAA,GAAY,CAAC,OAAA,EAA6B,QAAA,KAAyE;AACvH,IAAA,MAAM,MAAA,GAAS,QAAA,EAAU,MAAA,IAAU,uBAAA,CAAwB,QAAA,EAAU,OAAO,EAAE,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAW,CAAA;AACxG,IAAA,IAAI,CAAC,OAAO,KAAA,EAAO;AAAE,MAAA,SAAA,EAAU;AAAG,MAAA;AAAA,IAAQ;AAE1C,IAAA,IAAI,OAAA,CAAQ,SAAS,mBAAA,EAAqB;AACxC,MAAA,MAAA,CAAO,gBAAA,EAAiB;AACxB,MAAA,MAAMA,OAAAA,GAAS,WAAA,CAAY,GAAA,CAAI,OAAA,CAAQ,MAAM,KAAK,OAAA,CAAQ,GAAA,CAAI,OAAA,CAAQ,MAAM,CAAA,EAAG,MAAA;AAC/E,MAAA,IAAI,CAACA,OAAAA,IAAUA,OAAAA,CAAO,SAAA,CAAU,iBAAA,KAAsB,QAAQ,iBAAA,EAAmB;AACjF,MAAA,YAAA,CAAaA,OAAM,CAAA;AACnB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,OAAA,CAAQ,SAAS,mBAAA,EAAqB;AACxC,MAAA,MAAA,CAAO,gBAAA,EAAiB;AACxB,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,OAAA,CAAQ,MAAM,CAAA;AACzC,MAAA,MAAM,KAAA,GAAQ,MAAA,KAAW,MAAA,IACpB,MAAA,CAAO,SAAA,CAAU,sBAAsB,OAAA,CAAQ,iBAAA,IAC/C,MAAA,CAAO,aAAA,CAAc,OAAA,CAAQ,KAAK,KAClC,OAAA,CAAQ,KAAA,IAAS,CAAA,IACjB,OAAA,CAAQ,KAAA,IAAS,MAAA,CAAO,mBACxB,MAAA,CAAO,MAAA,GAAS,OAAA,CAAQ,KAAA,IAAS,MAAA,CAAO,MAAA;AAC7C,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,IAAI,MAAA,IAAU,CAAC,MAAA,CAAO,MAAA,CAAO,WAAW,SAAA,CAAU,MAAA,CAAO,IAAA,EAAM,iBAAA,EAAmB,SAAS,CAAA;AAC3F,QAAA,IAAI,MAAA,cAAoB,MAAM,CAAA;AAC9B,QAAA;AAAA,MACF;AACA,MAAA,MAAA,CAAO,UAAU,OAAA,CAAQ,KAAA;AACzB,MAAA,KAAK,KAAK,MAAM,CAAA;AAChB,MAAA;AAAA,IACF;AAMA,IAAA,IAAI,OAAA,CAAQ,SAAS,iBAAA,EAAmB;AACxC,IAAA,MAAM,SAAA,GAAY,WAAW,OAAO,CAAA;AACpC,IAAA,IAAI,CAAC,SAAA,EAAW;AAAE,MAAA,MAAA,CAAO,gBAAA,EAAiB;AAAG,MAAA,SAAA,CAAU,OAAA,EAAS,gBAAA,CAAiB,OAAO,CAAA,EAAG,UAAU,CAAA;AAAG,MAAA;AAAA,IAAQ;AAChH,IAAA,IAAI,WAAA,CAAY,IAAI,OAAA,CAAQ,MAAM,KAAK,cAAA,CAAe,GAAA,CAAI,OAAA,CAAQ,MAAM,CAAA,EAAG;AAAE,MAAA,MAAA,CAAO,gBAAA,EAAiB;AAAG,MAAA,SAAA,CAAU,OAAA,EAAS,mBAAmB,UAAU,CAAA;AAAG,MAAA;AAAA,IAAQ;AACnK,IAAA,IAAI,QAAQ,OAAA,KAAY,MAAA,IAAa,OAAA,CAAQ,OAAA,KAAY,UAAU,OAAA,EAAS;AAAE,MAAA,MAAA,CAAO,gBAAA,EAAiB;AAAG,MAAA,SAAA,CAAU,OAAA,EAAS,qBAAqB,UAAU,CAAA;AAAG,MAAA;AAAA,IAAQ;AACtK,IAAA,MAAM,gBAAgB,OAAA,CAAQ,aAAA;AAC9B,IAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,QAAA,KAAa,CAAC,MAAA,CAAO,aAAA,CAAc,aAAa,CAAA,IAAM,aAAA,GAA2B,CAAA,IAAM,aAAA,GAA2B,MAAA,CAAO,eAAA,CAAA,EAAkB;AAC9J,MAAA,MAAA,CAAO,gBAAA,EAAiB;AACxB,MAAA,SAAA,CAAU,OAAA,EAAS,mBAAmB,UAAU,CAAA;AAChD,MAAA;AAAA,IACF;AACA,IAAA,IAAI,OAAA;AACJ,IAAA,IAAI;AAAE,MAAA,OAAA,GAAU,cAAA,CAAe,SAAS,MAAM,CAAA;AAAA,IAAG,SAC1C,KAAA,EAAO;AAAE,MAAA,SAAA,CAAU,OAAA,EAAS,cAAc,KAAA,EAAO,2BAA2B,GAAG,KAAA,YAAiB,YAAA,GAAe,KAAA,CAAM,KAAA,GAAQ,SAAS,CAAA;AAAG,MAAA;AAAA,IAAQ;AACxJ,IAAA,MAAM,aAAa,OAAA,CAAQ,OAAA,CAAQ,WAAA,EAAa,OAAA,CAAQ,SAAS,QAAQ,CAAA;AACzE,IAAA,IAAI,UAAA,EAAY;AAAE,MAAA,MAAA,CAAO,gBAAA,EAAiB;AAAG,MAAA,SAAA,CAAU,OAAA,EAAS,UAAA,CAAW,IAAA,EAAM,UAAU,CAAA;AAAG,MAAA;AAAA,IAAQ;AAGtG,IAAA,MAAA,CAAO,OAAA,EAAQ;AACf,IAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,IAAA,MAAM,MAAA,GAAqB,EAAE,IAAA,EAAM,EAAE,GAAG,OAAA,EAAS,OAAA,EAAS,OAAA,CAAQ,KAAA,EAAM,EAAG,UAAA,EAAY,SAAA,EAAW,YAAA,EAAc,QAAQ,WAAA,EAAa,UAAA,EAAY,IAAA,CAAK,GAAA,EAAI,GAAI,OAAA,CAAQ,SAAA,EAAW,OAAA,EAAS,MAAM,cAAA,EAAgB,OAAA,CAAQ,IAAA,KAAS,QAAA,EAAU,SAAA,EAAW,KAAA,EAAO,gBAAA,EAAkB,KAAA,EAAO,mBAAmB,KAAA,EAAM;AAC/S,IAAA,WAAA,CAAY,GAAA,CAAI,OAAA,CAAQ,MAAA,EAAQ,MAAM,CAAA;AACtC,IAAA,cAAA,CAAe,GAAA,CAAI,OAAA,CAAQ,MAAA,EAAQ,MAAM,CAAA;AACzC,IAAA,IAAI,OAAA,CAAQ,SAAA,EAAW,MAAA,CAAO,gBAAA,GAAmB,OAAA,CAAQ,SAAA,CAAU,QAAA,CAAS,MAAM,YAAA,CAAa,MAAA,EAAQ,iBAAiB,CAAC,CAAA;AACzH,IAAA,MAAA,CAAO,aAAA,GAAgB,WAAW,MAAM,YAAA,CAAa,QAAQ,cAAc,CAAA,EAAG,QAAQ,SAAS,CAAA;AAC/F,IAAA,MAAM,WAAW,OAAA,CAAQ,WAAA,GAAc,OAAO,IAAA,EAAM,SAAS,KAAK,OAAA,CAAQ,IAAA;AAE1E,IAAA,KAAA,CAAM,YAAY;AAChB,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI;AACF,QAAA,IAAI,MAAA,CAAO,aAAa,QAAA,EAAU;AAAE,UAAA,gBAAA,CAAiB,MAAM,CAAA;AAAG,UAAA;AAAA,QAAQ;AACtE,QAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,UAAA,CAAW,EAAE,OAAA,EAAS,MAAA,CAAO,MAAM,OAAA,EAAS,OAAA,CAAQ,OAAO,SAAA,EAAW,MAAA,EAAQ,WAAW,MAAA,EAAQ,UAAA,EAAY,OAAO,UAAA,EAAY,IAAA,EAAM,UAAU,CAAA;AAC7K,QAAA,IAAI,MAAA,CAAO,aAAa,QAAA,IAAY,cAAA,CAAe,IAAI,OAAA,CAAQ,MAAM,MAAM,MAAA,EAAQ;AACjF,UAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,QAAA,EAAU,MAAM,kBAAkB,MAAM,CAAA;AAC7D,UAAA,gBAAA,CAAiB,MAAM,CAAA;AACvB,UAAA;AAAA,QACF;AACA,QAAA,IAAI,OAAA,CAAQ,SAAS,OAAA,EAAS;AAC5B,UAAA,IAAI;AACF,YAAA,MAAM,MAAA,GAAS,aAAA,CAAc,OAAA,CAAQ,aAAA,GAAgB,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAA,IAAK,EAAE,KAAA,EAAO,MAAA,EAAQ,CAAA;AAC9F,YAAA,IAAI,CAAC,MAAA,CAAO,SAAA,IAAa,CAAC,IAAA,CAAK,SAAA,EAAW,KAAA,EAAO,EAAE,IAAA,EAAM,mBAAA,EAAqB,eAAA,EAAiB,wBAAA,EAA0B,MAAA,EAAQ,OAAA,CAAQ,MAAA,EAAQ,iBAAA,EAAmB,SAAA,CAAU,iBAAA,EAAmB,MAAA,EAAQ,MAAA,CAAO,KAAA,EAAM,EAAG,MAAA,CAAO,QAAQ,CAAA,EAAG,SAAA,CAAU,OAAA,EAAS,uBAAA,EAAyB,SAAS,CAAA;AAAA,UAClS,SAAS,KAAA,EAAO;AAAE,YAAA,IAAI,CAAC,OAAO,SAAA,EAAW,SAAA,CAAU,SAAS,aAAA,CAAc,KAAA,EAAO,4BAA4B,CAAA,EAAG,SAAS,CAAA;AAAA,UAAG;AAC5H,UAAA,aAAA,CAAc,MAAM,CAAA;AACpB,UAAA,gBAAA,CAAiB,MAAM,CAAA;AACvB,UAAA;AAAA,QACF;AACA,QAAA,IAAI,CAAC,MAAA,IAAU,OAAQ,MAAA,CAAkC,MAAA,CAAO,aAAa,CAAA,KAAM,UAAA,EAAY,MAAM,IAAI,YAAA,CAAa,gBAAA,EAAkB,+CAA+C,SAAS,CAAA;AAChM,QAAA,MAAM,QAAA,GAAY,MAAA,CAAkC,MAAA,CAAO,aAAa,CAAA,EAAE;AAI1E,QAAA,MAAA,GAAS,EAAE,MAAA,EAAQ,IAAA,EAAM,MAAA,CAAO,IAAA,EAAM,UAAA,EAAY,SAAA,EAAW,MAAA,EAAQ,OAAA,CAAQ,aAAA,IAAiB,EAAA,EAAI,QAAA,EAAU,MAAA,EAAQ,OAAA,CAAQ,aAAA,IAAiB,EAAA,EAAI,QAAA,EAAU,CAAA,EAAG,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,YAAA,EAAc,KAAA,EAAO,aAAA,EAAe,KAAA,EAAO,UAAA,EAAY,KAAA,EAAO,UAAU,KAAA,EAAM;AAC3Q,QAAA,OAAA,CAAQ,GAAA,CAAI,OAAA,CAAQ,MAAA,EAAQ,MAAM,CAAA;AAClC,QAAA,IAAI,CAAC,IAAA,CAAK,SAAA,EAAW,OAAO,EAAE,IAAA,EAAM,qBAAqB,eAAA,EAAiB,wBAAA,EAA0B,MAAA,EAAQ,OAAA,CAAQ,QAAQ,iBAAA,EAAmB,SAAA,CAAU,mBAAmB,WAAA,EAAa,IAAA,EAAM,CAAA,EAAG;AAChM,UAAA,SAAA,CAAU,OAAA,EAAS,yBAAyB,UAAU,CAAA;AACtD,UAAA,WAAA,CAAY,MAAM,CAAA;AAClB,UAAA;AAAA,QACF;AACA,QAAA,cAAA,CAAe,MAAM,CAAA;AACrB,QAAA,KAAK,KAAK,MAAM,CAAA;AAAA,MAClB,SAAS,KAAA,EAAO;AACd,QAAA,IAAI,CAAC,MAAA,CAAO,SAAA,IAAa,CAAC,UAAU,SAAA,CAAU,OAAA,EAAS,aAAA,CAAc,KAAA,EAAO,gBAAgB,CAAA,EAAG,KAAA,YAAiB,YAAA,GAAe,KAAA,CAAM,QAAQ,SAAS,CAAA;AACtJ,QAAA,IAAI,MAAA,cAAoB,MAAM,CAAA;AAAA,aACzB;AAAE,UAAA,aAAA,CAAc,MAAM,CAAA;AAAG,UAAA,gBAAA,CAAiB,MAAM,CAAA;AAAA,QAAG;AAAA,MAC1D;AAAA,IACF,CAAA,GAAG,CAAE,KAAA,CAAM,MAAM;AACf,MAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,KAAK,MAAM,CAAA;AACjD,MAAA,IAAI,UAAA,cAAwB,UAAU,CAAA;AAAA,WACjC;AAAE,QAAA,aAAA,CAAc,MAAM,CAAA;AAAG,QAAA,gBAAA,CAAiB,MAAM,CAAA;AAAA,MAAG;AAAA,IAC1D,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,SAAS,OAAA,GAAgB;AACvB,IAAA,IAAI,QAAA,EAAU;AACd,IAAA,QAAA,GAAW,IAAA;AACX,IAAA,KAAA,MAAW,MAAA,IAAU,CAAC,GAAG,WAAA,CAAY,QAAQ,CAAA,EAAG,YAAA,CAAa,MAAA,EAAQ,iBAAiB,CAAA;AACtF,IAAA,KAAA,MAAW,MAAA,IAAU,CAAC,GAAG,OAAA,CAAQ,QAAQ,CAAA,cAAe,MAAM,CAAA;AAC9D,IAAA,eAAA,EAAgB;AAAA,EAClB;AAEA,EAAA,SAAS,SAAA,GAAkB;AACzB,IAAA,OAAA,EAAQ;AACR,IAAA,IAAI;AAAE,MAAA,SAAA,CAAU,KAAA,IAAQ;AAAA,IAAG,CAAA,CAAA,MAAQ;AAAA,IAAoB;AAAA,EACzD;AAEA,EAAA,MAAM,eAAA,GAAkB,SAAA,CAAU,SAAA,CAAU,SAAS,CAAA;AACrD,EAAA,OAAO;AAAA,IACL,WAAA,GAAc;AAAA,IAA+D,CAAA;AAAA,IAC7E,OAAA;AAAA,IACA,YAAA,GAAe;AAAE,MAAA,OAAO,WAAA,CAAY,IAAA;AAAA,IAAM,CAAA;AAAA,IAC1C,cAAA,GAAiB;AAAE,MAAA,OAAO,cAAA,CAAe,IAAA;AAAA,IAAM,CAAA;AAAA,IAC/C,4BAAA,GAA+B;AAAE,MAAA,OAAO,CAAC,GAAG,cAAA,CAAe,MAAA,EAAQ,CAAA,CAAE,MAAA,CAAO,CAAC,MAAA,KAAW,MAAA,CAAO,gBAAgB,CAAA,CAAE,MAAA;AAAA,IAAQ,CAAA;AAAA,IACzH,oBAAA,GAAuB;AAAE,MAAA,OAAO,MAAA,CAAO,oBAAA;AAAA,IAAsB;AAAA,GAC/D;AACF;;;ACjfO,SAAS,oBAAoB,KAAA,EAAsC;AACxE,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,IAAI,KAAA,GAAQ;AAAE,MAAA,OAAO,KAAA,CAAM,KAAA;AAAA,IAAO,CAAA;AAAA,IAClC,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,SAAS,QAAA,EAAoC;AAAE,MAAA,OAAO,KAAA,CAAM,SAAS,QAAQ,CAAA;AAAA,IAAG;AAAA,GACjF,CAAA;AACH;AAqBO,SAAS,yBAAyB,OAAA,EAAgD;AACvF,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,OAAA,KAAY,MAAA,GAChC,SACA,IAAI,GAAA,CAAI,OAAA,CAAQ,OAAA,CAAQ,IAAI,CAAC,UAAA,KAAe,aAAA,CAAc,UAAU,CAAC,CAAC,CAAA;AAC1E,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,IAAI,OAAA,GAAU;AAAE,MAAA,OAAO,QAAQ,MAAA,CAAO,WAAA;AAAA,IAAa,CAAA;AAAA,IACnD,IAAI,iBAAA,GAAoB;AAAE,MAAA,OAAO,QAAQ,MAAA,CAAO,iBAAA;AAAA,IAAmB,CAAA;AAAA,IACnE,OAAO,OAAA,CAAQ,KAAA;AAAA,IACf,WAAuC,UAAA,EAAoC;AACzE,MAAA,IAAI,WAAW,CAAC,OAAA,CAAQ,IAAI,aAAA,CAAc,UAAU,CAAC,CAAA,EAAG;AACtD,QAAA,MAAM,IAAI,aAAa,wBAAA,EAA0B,2BAAA,EAA6B,YAAY,EAAE,YAAA,EAAc,UAAA,CAAW,EAAA,EAAI,CAAA;AAAA,MAC3H;AACA,MAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,SAAA,CAAU,UAAA,EAAY,QAAQ,eAAe,CAAA;AAAA,IACrE;AAAA,GACD,CAAA;AACH;;;ACKA,IAAM,aAAA,uBAAoB,OAAA,EAAkC;AAE5D,SAAS,WAAW,OAAA,EAA4C;AAC9D,EAAA,MAAM,aAAA,GAAgB,EAAE,IAAA,EAAM,QAAA,EAAmB,GAAI,QAAQ,IAAA,KAAS,MAAA,GAAY,EAAE,IAAA,EAAM,OAAA,CAAQ,IAAA,KAAS,EAAC,EAAI,GAAI,OAAA,CAAQ,WAAA,KAAgB,MAAA,GAAY,EAAE,WAAA,EAAa,OAAA,CAAQ,WAAA,EAAY,GAAI,EAAC,EAAG;AACnM,EAAA,IAAI,QAAQ,aAAA,EAAe,OAAO,QAAQ,aAAA,CAAc,OAAA,CAAQ,KAAK,aAAa,CAAA;AAClF,EAAA,MAAM,oBAAqB,UAAA,CAAwH,YAAA;AACnJ,EAAA,IAAI,CAAC,iBAAA,EAAmB,MAAM,IAAI,wBAAwB,+CAA+C,CAAA;AACzG,EAAA,OAAO,IAAI,iBAAA,CAAkB,OAAA,CAAQ,GAAA,EAAK,aAAa,CAAA;AACzD;AAIA,SAAS,iBAAA,CAAkB,GAAA,EAAgB,SAAA,EAAmB,iBAAA,EAA2B,SAAsC,QAAA,EAAqF;AAClN,EAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,CAAC,UAAA,KAAe,aAAA,CAAc,UAAU,CAAC,CAAC,CAAA;AAC9E,EAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,EAAM;AACxB,EAAA,MAAM,YAAA,GAAyC,KAAA,CAAM,KAAA,KAAU,cAAA,GAAiB,WAAW,KAAA,CAAM,KAAA;AACjG,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,qBAAA;AAAA,IACN,eAAA,EAAiB,wBAAA;AAAA,IACjB,SAAA;AAAA,IACA,WAAA,EAAa,aAAA;AAAA,IACb,iBAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA,EAAO,YAAA;AAAA,IACP,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,QAAA,EAAU,YAAA,KAAiB,OAAA,GAAU,KAAA,CAAM,SAAS,MAAA,CAAO,CAAC,OAAA,KAAY,OAAA,CAAQ,GAAA,CAAI,aAAA,CAAc,EAAE,IAAA,EAAM,QAAQ,IAAA,EAAM,EAAA,EAAI,OAAA,CAAQ,YAAA,EAAc,OAAA,EAAS,OAAA,CAAQ,eAAA,EAAiB,CAAC,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,aAAa,EAAE,IAAA,EAAM,OAAA,CAAQ,IAAA,EAAM,cAAc,OAAA,CAAQ,YAAA,EAAc,eAAA,EAAiB,OAAA,CAAQ,eAAA,EAAiB,iBAAA,EAAmB,OAAA,CAAQ,iBAAA,EAAmB,YAAY,qBAAA,CAAsB,OAAA,CAAQ,UAAU,CAAA,EAAG,GAAI,OAAA,CAAQ,OAAA,KAAY,MAAA,GAAY,EAAE,OAAA,EAAS,OAAA,CAAQ,OAAA,EAAQ,GAAI,EAAC,EAAI,GAAI,OAAA,CAAQ,0BAA0B,MAAA,GAAY,EAAE,qBAAA,EAAuB,OAAA,CAAQ,uBAAsB,GAAI,EAAC,EAAG,CAAE,IAAI;AAAC,GACrlB;AACF;AAEA,SAAS,gBAAgB,OAAA,EAAyC;AAChE,EAAA,IAAI,CAAC,OAAA,IAAW,OAAO,OAAA,CAAQ,OAAO,QAAA,IAAY,OAAA,CAAQ,EAAA,CAAG,IAAA,EAAK,KAAM,EAAA,EAAI,MAAM,IAAI,UAAU,oDAAoD,CAAA;AACpJ,EAAA,MAAM,sBAAsB,OAAA,CAAQ,MAAA,GAAS,iBAAiB,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAA,GAAI,MAAA;AACpF,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,MAAA,EAAQ,MAAA,IAAU,EAAC;AAC3C,EAAA,KAAA,MAAW,cAAc,OAAA,EAAS;AAChC,IAAA,IAAK,UAAA,CAA0C,IAAA,KAAS,KAAA,IAAU,UAAA,CAA0C,IAAA,KAAS,QAAA,EAAU,MAAM,IAAI,SAAA,CAAU,CAAA,YAAA,EAAgB,UAAA,CAAwC,EAAA,IAAM,SAAS,CAAA,2BAAA,CAA6B,CAAA;AACvP,IAAA,IAAI,CAAC,mBAAA,EAAqB,YAAA,CAAa,YAAA,CAAa,UAAU,CAAA,EAAG,MAAM,IAAI,SAAA,CAAU,CAAA,YAAA,EAAe,UAAA,CAAW,EAAE,CAAA,oCAAA,CAAsC,CAAA;AAAA,EACzJ;AACA,EAAA,MAAM,MAAA,GAAS,WAAW,OAAO,CAAA;AACjC,EAAA,MAAM,OAAO,MAAA,CAAO,IAAA;AACpB,EAAA,IAAI,CAAC,IAAA,EAAM,MAAM,IAAI,wBAAwB,2CAA2C,CAAA;AACxF,EAAA,MAAM,MAAA,GAAS,sBAAA,CAAuB,OAAA,CAAQ,MAAM,CAAA;AACpD,EAAA,MAAM,YAAY,iCAAA,CAAkC;AAAA,IAClD,gBAAA,CAAiB,MAAM,QAAA,EAAU;AAAE,MAAA,IAAA,CAAK,gBAAA,CAAiB,MAAM,QAAQ,CAAA;AAAA,IAAG,CAAA;AAAA,IAC1E,mBAAA,CAAoB,MAAM,QAAA,EAAU;AAAE,MAAA,IAAA,CAAK,mBAAA,CAAoB,MAAM,QAAQ,CAAA;AAAA,IAAG,CAAA;AAAA,IAChF,WAAA,CAAY,cAAc,QAAA,EAAU;AAAE,MAAC,IAAA,CAAoC,YAAY,YAAA,EAAc,QAAA,GAAW,CAAC,GAAG,QAAQ,IAAI,MAAS,CAAA;AAAA,IAAG,CAAA;AAAA,IAC5I,KAAA,GAAQ;AAAE,MAAA,IAAA,CAAK,KAAA,EAAM;AAAA,IAAG,CAAA;AAAA,IACxB,KAAA,GAAQ;AAAE,MAAA,IAAI;AAAE,QAAA,IAAA,CAAK,KAAA,EAAM;AAAA,MAAG,CAAA,CAAA,MAAQ;AAAA,MAAa;AAAA,IAAE;AAAA,GACvD,EAAG,EAAE,MAAA,EAAQ,CAAA;AACb,EAAA,MAAM,cAAA,GAAgC,oBAAoB,MAAM,CAAA;AAChE,EAAA,MAAM,aAAA,GAA+B,oBAAoB,MAAM,CAAA;AAC/D,EAAA,MAAM,MAAA,GAAS,sBAAA,CAAuB,EAAE,SAAA,EAAW,mBAAmB,eAAA,EAAiB,eAAA,EAAiB,OAAA,CAAQ,EAAA,EAAI,sBAAsB,OAAA,CAAQ,oBAAA,EAAsB,MAAA,EAAQ,MAAA,EAAQ,gBAAgB,CAAA;AACxM,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAA2B;AACjD,EAAA,MAAM,gBAAA,GAAmB,EAAE,KAAA,EAAO,EAAA,EAAG;AACrC,EAAA,MAAM,sBAAA,GAAyB,OAAA,CAAQ,MAAA,EAAQ,GAAA,CAAI,iBAAA,IAAqB,CAAA,OAAA,EAAU,IAAA,CAAK,GAAA,EAAI,CAAE,QAAA,CAAS,EAAE,CAAC,CAAA,CAAA;AACzG,EAAA,IAAI,QAAA,GAAW,CAAA;AACf,EAAA,IAAI,QAAA,GAAW,KAAA;AACf,EAAA,IAAI,OAAA,GAAiC,OAAO,MAAA,CAAO,EAAE,iBAAiB,wBAAA,EAA0B,SAAA,EAAW,OAAA,CAAQ,EAAA,EAAI,WAAA,EAAa,eAAA,EAAiB,mBAAmB,EAAA,EAAI,KAAA,EAAO,UAAA,EAAY,QAAA,EAAU,CAAA,EAAG,KAAA,EAAO,EAAC,EAAG,QAAA,EAAU,EAAC,EAAG,CAAA;AACrO,EAAA,MAAM,UAAA,GAAa,mBAAA;AACnB,EAAA,MAAM,eAAA,GAAkB,OAAA,CAAQ,MAAA,IAAU,UAAA,GACtC,WAAW,SAAA,CAAU,KAAA,CAAM,MAAA,EAAQ,EAAE,UAAA,EAAY,EAAE,MAAA,EAAQ,CAAA,KAAA,EAAQ,KAAK,GAAA,EAAI,CAAE,QAAA,CAAS,EAAE,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,GAAS,QAAA,CAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,EAAG,EAAG,CAAA,GACvI,MAAA;AACJ,EAAA,MAAM,mBAAA,GAAsB,eAAA,GAAkB,mBAAA,CAAoB,eAAe,CAAA,GAAI,MAAA;AACrF,EAAA,MAAM,UAAA,GAAyC,eAAA,IAAmB,mBAAA,GAAsB,wBAAA,CAAyB;AAAA,IAC/G,MAAA,EAAQ,eAAA,CAAgB,QAAA,CAAS,UAAA,CAAW,MAAA;AAAA,IAC5C,KAAA,EAAO,mBAAA;AAAA,IACP,MAAA;AAAA,IACA,eAAA,EAAiB;AAAA,GAClB,CAAA,GAAI,MAAA;AACL,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,MAAA,IAAU,UAAA,GAAa,gCAAA,CAAiC;AAAA,IAC/E,SAAA;AAAA,IACA,SAAA,EAAW,eAAA;AAAA,IACX,IAAA,EAAM,UAAA;AAAA,IACN,MAAA,EAAQ,aAAA;AAAA,IACR,MAAA;AAAA,IACA,QAAA,EAAU,MAAM,UAAA,CAAW,iBAAA,EAAkB,CAAE,MAAA,CAAO,CAAC,OAAA,KAAY,OAAA,CAAQ,IAAA,CAAK,CAAC,UAAA,KAAe,aAAA,CAAc,UAAU,CAAA,KAAM,aAAA,CAAc,EAAE,IAAA,EAAM,OAAA,CAAQ,IAAA,EAAM,EAAA,EAAI,OAAA,CAAQ,YAAA,EAAc,OAAA,EAAS,OAAA,CAAQ,eAAA,EAAiB,CAAC,CAAC,CAAA;AAAA,IAChO,WAAA,EAAa,CAAC,KAAA,EAAO,SAAA,KAAc;AACjC,MAAA,MAAM,YAAA,GAAe,UAAA,CAAW,YAAA,CAAa,YAAA,CAAa,EAAE,IAAA,EAAM,SAAA,CAAU,IAAA,EAAM,EAAA,EAAI,SAAA,CAAU,YAAA,EAAc,OAAA,EAAS,SAAA,CAAU,iBAAiB,CAAA;AAClJ,MAAA,OAAO,eAAA,IAAmB,sBAAsB,wBAAA,CAAyB;AAAA,QACvE,MAAA,EAAQ,eAAA,CAAgB,QAAA,CAAS,UAAA,CAAW,MAAA;AAAA,QAC5C,KAAA,EAAO,mBAAA;AAAA,QACP,MAAA;AAAA,QACA,OAAA,EAAS,YAAA,EAAc,gBAAA,IAAoB,EAAC;AAAA,QAC5C,eAAA,EAAiB;AAAA,OAClB,CAAA,GAAI,MAAA;AAAA,IACP,CAAA;AAAA,IACA,cAAA,EAAgB,CAAC,IAAA,KAAS;AACxB,MAAA,MAAM,eAAe,UAAA,CAAW,YAAA,CAAa,YAAA,CAAa,EAAE,MAAM,IAAA,CAAK,IAAA,KAAS,QAAA,GAAW,QAAA,GAAW,OAAO,EAAA,EAAI,IAAA,CAAK,cAAc,OAAA,EAAS,IAAA,CAAK,iBAAiB,CAAA;AACnK,MAAA,IAAI,CAAC,YAAA,IAAgB,YAAA,CAAa,UAAA,CAAW,UAAU,IAAA,CAAK,IAAA,KAAS,QAAA,GAAW,QAAA,GAAW,QAAQ,MAAM,IAAI,YAAA,CAAa,eAAA,EAAiB,oCAAoC,UAAU,CAAA;AACzL,MAAA,MAAM,aAAa,YAAA,CAAa,UAAA;AAChC,MAAA,IAAI,KAAA;AACJ,MAAA,IAAI;AAAE,QAAA,KAAA,GAAQ,UAAA,CAAW,OAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,OAAO,CAAA;AAAA,MAAG,CAAA,CAAA,MAAQ;AAAE,QAAA,MAAM,IAAI,YAAA,CAAa,2BAAA,EAA6B,sCAAA,EAAwC,SAAS,CAAA;AAAA,MAAG;AACxK,MAAA,OAAO,EAAE,KAAA,EAAO,QAAA,EAAU,WAAW,QAAA,EAAU,OAAA,GAAU,KAAK,CAAA,EAAE;AAAA,IAClE,CAAA;AAAA,IACA,UAAA,EAAY,OAAO,EAAE,OAAA,EAAS,WAAW,MAAA,EAAQ,UAAA,EAAY,MAAK,KAAM;AACtE,MAAA,MAAM,YAAA,GAAe,UAAA,CAAW,YAAA,CAAa,YAAA,CAAa,EAAE,IAAA,EAAM,SAAA,CAAU,IAAA,EAAM,EAAA,EAAI,SAAA,CAAU,YAAA,EAAc,OAAA,EAAS,SAAA,CAAU,iBAAiB,CAAA;AAClJ,MAAA,IAAI,CAAC,YAAA,EAAc,MAAM,IAAI,YAAA,CAAa,eAAA,EAAiB,0CAA0C,UAAU,CAAA;AAC/G,MAAA,MAAM,UAAU,YAAA,CAAa,OAAA;AAC7B,MAAA,IAAI,CAAC,OAAA,EAAS,MAAM,IAAI,YAAA,CAAa,eAAA,EAAiB,yCAAyC,UAAU,CAAA;AACzG,MAAA,OAAO,OAAA,CAAQ,SAAS,EAAE,MAAA,EAAQ,YAAY,SAAA,EAAW,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAM,CAAA;AAAA,IACnF,CAAA;AAAA,IACA,aAAA,EAAe,CAAC,KAAA,EAAO,IAAA,KAAS;AAC9B,MAAA,MAAM,YAAA,GAAe,UAAA,CAAW,YAAA,CAAa,YAAA,CAAa,EAAE,IAAA,EAAM,KAAA,EAAO,EAAA,EAAI,IAAA,CAAK,YAAA,EAAc,OAAA,EAAS,IAAA,CAAK,iBAAiB,CAAA;AAC/H,MAAA,IAAI,CAAC,gBAAgB,YAAA,CAAa,UAAA,CAAW,SAAS,KAAA,EAAO,MAAM,IAAI,KAAA,CAAM,qCAAqC,CAAA;AAClH,MAAA,MAAM,MAAM,YAAA,CAAa,UAAA;AACzB,MAAA,MAAM,MAAA,GAAS,GAAA,CAAI,QAAA,CAAS,KAAA,CAAM,KAAK,CAAA;AACvC,MAAA,OAAO,EAAE,OAAO,MAAA,EAAQ,QAAA,EAAU,IAAI,QAAA,EAAU,QAAA,GAAW,MAAM,CAAA,EAAE;AAAA,IACrE,CAAA;AAAA,IACA,WAAA,EAAa,CAAC,KAAA,EAAO,IAAA,KAAS;AAC5B,MAAA,MAAM,YAAA,GAAe,UAAA,CAAW,YAAA,CAAa,YAAA,CAAa,EAAE,IAAA,EAAM,QAAA,EAAU,EAAA,EAAI,IAAA,CAAK,YAAA,EAAc,OAAA,EAAS,IAAA,CAAK,iBAAiB,CAAA;AAClI,MAAA,IAAI,CAAC,gBAAgB,YAAA,CAAa,UAAA,CAAW,SAAS,QAAA,EAAU,MAAM,IAAI,KAAA,CAAM,wCAAwC,CAAA;AACxH,MAAA,MAAM,SAAS,YAAA,CAAa,UAAA;AAC5B,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AACtC,MAAA,OAAO,EAAE,OAAO,MAAA,EAAQ,QAAA,EAAU,OAAO,QAAA,EAAU,IAAA,GAAO,MAAM,CAAA,EAAE;AAAA,IACpE;AAAA,GACD,CAAA,GAAI,MAAA;AAEL,EAAA,MAAM,IAAA,GAAO,CAAC,IAAA,KAAsC;AAAE,IAAA,OAAA,GAAU,MAAA,CAAO,OAAO,EAAE,GAAG,MAAM,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,CAAC,GAAG,IAAA,CAAK,KAAK,CAAC,CAAA,EAAG,QAAA,EAAU,MAAA,CAAO,MAAA,CAAO,CAAC,GAAG,IAAA,CAAK,QAAQ,CAAC,CAAA,EAAG,CAAA;AAAG,IAAA,KAAA,MAAW,QAAA,IAAY,CAAC,GAAG,SAAS,CAAA,EAAG;AAAE,MAAA,IAAI;AAAE,QAAA,QAAA,CAAS,OAAO,CAAA;AAAA,MAAG,CAAA,CAAA,MAAQ;AAAA,MAA2B;AAAA,IAAE;AAAA,EAAE,CAAA;AACzR,EAAA,MAAM,qBAAqB,MAAY;AAAE,IAAA,IAAI,CAAC,OAAA,CAAQ,MAAA,IAAU,QAAA,EAAU;AAAQ,IAAA,QAAA,IAAY,CAAA;AAAG,IAAA,IAAI;AAAE,MAAA,SAAA,CAAU,IAAA,CAAK,iBAAA,CAAkB,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA,EAAG,OAAA,CAAQ,MAAA,CAAO,GAAA,CAAI,SAAS,CAAA,CAAA,EAAI,sBAAA,EAAwB,OAAA,EAAS,QAAQ,CAAC,CAAA;AAAA,IAAG,CAAA,CAAA,MAAQ;AAAA,IAA2C;AAAA,EAAE,CAAA;AACjS,EAAA,MAAM,SAAA,GAAY,SAAA,CAAU,SAAA,CAAU,CAAC,YAAA,KAAiB;AACtD,IAAA,IAAI,YAAA,CAAa,IAAA,KAAS,qBAAA,IAAyB,YAAA,CAAa,gBAAgB,eAAA,EAAiB;AAC/F,MAAA,MAAM,OAAA,GAAU,MAAA,CAAO,aAAA,CAAc,YAAY,CAAA;AACjD,MAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,QAAA,gBAAA,CAAiB,QAAQ,YAAA,CAAa,iBAAA;AACtC,QAAA,IAAA,CAAK,EAAE,eAAA,EAAiB,wBAAA,EAA0B,SAAA,EAAW,YAAA,CAAa,WAAW,WAAA,EAAa,YAAA,CAAa,WAAA,EAAa,iBAAA,EAAmB,YAAA,CAAa,iBAAA,EAAmB,OAAO,YAAA,CAAa,KAAA,EAAO,QAAA,EAAU,YAAA,CAAa,QAAA,EAAU,KAAA,EAAO,aAAa,KAAA,EAAO,QAAA,EAAU,YAAA,CAAa,QAAA,EAAU,CAAA;AAAA,MACzS;AAAA,IACF,CAAA,MAAA,IAAW,YAAA,CAAa,IAAA,KAAS,kBAAA,EAAoB;AACnD,MAAA,MAAA,CAAO,UAAA,CAAW,aAAa,OAAO,CAAA;AACtC,MAAA,IAAA,CAAK,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,UAAU,KAAA,EAAO,YAAA,CAAa,OAAA,EAAS,KAAA,EAAO,EAAC,EAAG,QAAA,EAAU,IAAI,CAAA;AAAA,IAC5F;AAAA,EACF,CAAC,CAAA;AACD,EAAA,MAAM,UAAU,MAAY;AAAE,IAAA,IAAI,CAAC,QAAA,EAAU;AAAE,MAAA,eAAA,EAAiB,OAAO,2BAA2B,CAAA;AAAG,MAAA,QAAA,EAAU,OAAA,EAAQ;AAAG,MAAA,MAAA,CAAO,WAAW,2BAA2B,CAAA;AAAG,MAAA,IAAA,CAAK,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,cAAA,EAAgB,mBAAmB,EAAA,EAAI,QAAA,EAAU,CAAA,EAAG,KAAA,EAAO,EAAC,EAAG,QAAA,EAAU,EAAC,EAAG,KAAA,EAAO,6BAA6B,CAAA;AAAA,IAAG;AAAA,EAAE,CAAA;AAC1T,EAAA,IAAA,CAAK,gBAAA,CAAiB,gBAAgB,OAAO,CAAA;AAC7C,EAAA,IAAI,MAAA,CAAO,gBAAA,EAAkB,MAAA,CAAO,gBAAA,CAAiB,SAAS,OAAO,CAAA;AAAA,cACzD,OAAA,GAAU,OAAA;AACtB,EAAA,kBAAA,EAAmB;AACnB,EAAA,MAAM,eAAe,OAAA,CAAQ,MAAA,EAAQ,IAAI,SAAA,CAAU,MAAM,oBAAoB,CAAA;AAE7E,EAAA,MAAM,MAAA,GAAwB;AAAA,IAC5B,WAAA,EAAa,eAAA;AAAA,IAAiB,WAAW,OAAA,CAAQ,EAAA;AAAA,IACjD,IAAI,iBAAA,GAAoB;AAAE,MAAA,OAAO,gBAAA,CAAiB,KAAA;AAAA,IAAO,CAAA;AAAA,IACzD,OAAO,MAAM,OAAA;AAAA,IACb,WAAuC,UAAA,EAAoC;AAAE,MAAA,OAAO,MAAA,CAAO,UAAU,UAAU,CAAA;AAAA,IAAG,CAAA;AAAA,IAClH,mBAA+C,UAAA,EAAgD;AAAE,MAAA,OAAO,MAAA,CAAO,UAAS,CAAE,IAAA,CAAK,CAAC,OAAA,KAAY,OAAA,CAAQ,IAAA,KAAS,UAAA,CAAW,IAAA,IAAQ,OAAA,CAAQ,iBAAiB,UAAA,CAAW,EAAA,IAAM,QAAQ,eAAA,KAAoB,UAAA,CAAW,OAAO,CAAA,GAAI,MAAA,CAAO,SAAA,CAAU,UAAU,CAAA,GAAI,MAAA;AAAA,IAAW,CAAA;AAAA,IACtT,SAAS,MAAM,MAAA,CAAO,OAAO,EAAE,GAAG,SAAS,gBAAA,EAAkB,MAAA,CAAO,kBAAkB,iBAAA,EAAmB,MAAA,CAAO,mBAAmB,SAAA,EAAW,OAAA,CAAQ,UAAU,OAAA,GAAU,CAAA,GAAI,GAAG,CAAA;AAAA,IACjL,UAAU,QAAA,EAAU;AAAE,MAAA,SAAA,CAAU,IAAI,QAAQ,CAAA;AAAG,MAAA,QAAA,CAAS,OAAO,CAAA;AAAG,MAAA,OAAO,MAAM,SAAA,CAAU,MAAA,CAAO,QAAQ,CAAA;AAAA,IAAG,CAAA;AAAA,IAC3G,OAAA,CAAQ,SAAS,kCAAA,EAAmD;AAAE,MAAA,IAAI,QAAA,EAAU,OAAO,OAAA,CAAQ,OAAA,EAAQ;AAAG,MAAA,QAAA,GAAW,IAAA;AAAM,MAAA,IAAA,CAAK,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,YAAY,CAAA;AAAG,MAAA,YAAA,IAAe;AAAG,MAAA,SAAA,EAAU;AAAG,MAAA,eAAA,EAAiB,OAAO,MAAM,CAAA;AAAG,MAAA,QAAA,EAAU,OAAA,EAAQ;AAAG,MAAA,MAAA,CAAO,QAAQ,MAAM,CAAA;AAAG,MAAA,IAAA,CAAK,mBAAA,CAAoB,gBAAgB,OAAO,CAAA;AAAG,MAAA,MAAA,CAAO,mBAAA,GAAsB,SAAS,OAAO,CAAA;AAAG,MAAA,SAAA,CAAU,KAAA,IAAQ;AAAG,MAAA,IAAA,CAAK,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,YAAY,iBAAA,EAAmB,EAAA,EAAI,QAAA,EAAU,CAAA,EAAG,OAAO,EAAC,EAAG,QAAA,EAAU,IAAI,CAAA;AAAG,MAAA,OAAO,eAAA,GAAkB,eAAA,CAAgB,OAAA,CAAQ,EAAE,MAAA,EAAQ,CAAA,CAAE,IAAA,CAAK,MAAM,MAAS,CAAA,GAAI,OAAA,CAAQ,OAAA,EAAQ;AAAA,IAAG;AAAA,GAC7lB;AACA,EAAA,aAAA,CAAc,GAAA,CAAI,QAAkB,MAAM,CAAA;AAC1C,EAAA,OAAO,MAAA;AACT;AAGO,SAAS,oBAAoB,OAAA,EAAoD;AAAE,EAAA,OAAO,gBAAgB,OAAO,CAAA;AAAG;AAGpH,SAAS,6BAAA,CAA8B,SAAqC,aAAA,EAAmD;AAAE,EAAA,OAAO,eAAA,CAAgB,EAAE,GAAG,OAAA,EAAS,eAAe,CAAA;AAAG;AAGxL,SAAS,uBAAuB,MAAA,EAAyC;AAC9E,EAAA,MAAM,MAAA,GAAS,aAAA,CAAc,GAAA,CAAI,MAAgB,CAAA;AACjD,EAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,MAAM,uCAAuC,CAAA;AACpE,EAAA,OAAO,MAAA;AACT","file":"chunk-RAQOFUZY.js","sourcesContent":["// WebLoom v4 typed capability bridge。\n//\n// 这里是唯一的远端 call/stream pending 实现。它负责本端的 deadline、代理\n// 身份 fence、有限 DTO/transfer 校验以及 stream 的消费状态机;MessagePort\n// provider 负责另一侧的 handler 执行状态机。\n\nimport type {\n CapabilityBridge,\n CapabilityClient,\n RemoteCapability,\n RpcCapabilityBase,\n RpcCallOptions,\n ServiceReference,\n StreamCapabilityBase,\n StreamSubscribeOptions,\n StreamSubscription,\n} from \"../contracts/capability.js\";\nimport { WebLoomError, type LifecycleScope, type RuntimeKind, type RuntimeSnapshot, type SnapshotApplyResult } from \"../contracts/lifecycle.js\";\nimport {\n assertReceivedPortSet,\n cloneFrozenAttributes,\n createReceivePortLedger,\n createRuntimeBudget,\n DEFAULT_RUNTIME_LIMITS,\n normalizeRuntimeLimits,\n validateDto,\n validateRawDto,\n validateTransferList,\n validateTransferListWithStats,\n type ReceivePortLedger,\n type RuntimeBudget,\n type RuntimeLimitsInput,\n} from \"./dto.js\";\nimport {\n createRuntimeMessageCodec,\n RUNTIME_CALL_TYPE,\n RUNTIME_CANCEL_TYPE,\n RUNTIME_CREDIT_TYPE,\n RUNTIME_ERROR_MESSAGE_TYPE,\n RUNTIME_ERROR_TYPE,\n RUNTIME_NEXT_TYPE,\n RUNTIME_PROTOCOL_VERSION,\n RUNTIME_RESULT_TYPE,\n RUNTIME_SNAPSHOT_TYPE,\n type RuntimeErrorResponseMessage,\n type RuntimeWireMessage,\n} from \"../runtime/runtimeProtocol.js\";\n\nexport interface RuntimeReceiveMetadata {\n /** 本次 MessageEvent 实际携带的业务 MessagePort;仅 transport 本地使用。 */\n readonly ports?: readonly MessagePort[];\n /** 由物理 endpoint transport 创建的一次性接收资源账本。 */\n readonly ledger?: ReceivePortLedger;\n /** 物理 endpoint 已完成一次 codec decode。 */\n readonly decoded?: boolean;\n}\n\nexport interface RuntimeTransport {\n /** 发送已验证 v4 message;transfer 由契约 extractor 提供。 */\n send(message: RuntimeWireMessage, transfer?: readonly Transferable[]): void;\n /** 订阅接收 message 及本次事件的本地 transfer 元数据。 */\n subscribe(listener: (message: RuntimeWireMessage, metadata?: RuntimeReceiveMetadata) => void): () => void;\n /** 关闭本端传输。 */\n close?(): void;\n /** 物理 endpoint 对 decode/接收账本错误的统一通知。 */\n subscribeError?(listener: (error: unknown, metadata?: RuntimeReceiveMetadata) => void): () => void;\n}\n\nexport interface CreateCapabilityBridgeOptions {\n /** 底层双向 transport。 */\n readonly transport: RuntimeTransport;\n /** 预期的对端 Runtime 类型。 */\n readonly remoteRuntimeKind?: RuntimeKind;\n /** 预期的对端逻辑 Runtime id。 */\n readonly remoteRuntimeId?: string;\n /** 默认调用预算。 */\n readonly defaultCallTimeoutMs?: number;\n /** 可信 Runtime/advanced 装配提供的预算;只能收紧 v4 默认值。 */\n readonly limits?: RuntimeLimitsInput;\n /** 可选的 Runtime 方向共享计数器。 */\n readonly budget?: RuntimeBudget;\n}\n\ninterface ProxyRecord {\n readonly capability: RemoteCapability;\n readonly scope?: LifecycleScope;\n readonly cacheKey: string;\n bound?: ServiceReference;\n revoked: boolean;\n reason: string;\n}\n\ninterface QueueItem {\n readonly value: unknown;\n readonly ledger: ReceivePortLedger;\n readonly budgetBytes: number;\n}\n\ninterface QuotaReservation {\n readonly payloadBytes: number;\n pendingReserved: boolean;\n streamReserved: boolean;\n payloadReserved: boolean;\n}\n\ninterface WaitingCallRecord {\n readonly proxy: ProxyRecord;\n readonly prepared: { readonly value: unknown; readonly transfer: readonly Transferable[]; readonly budgetBytes: number };\n readonly reservation: QuotaReservation;\n readonly deadline: number;\n readonly mode: \"unary\" | \"stream\";\n fail: (error: unknown) => void;\n start: (reference: ServiceReference, remaining: number) => void;\n finished: boolean;\n timer?: ReturnType<typeof setTimeout>;\n removeListener?: () => void;\n}\n\ninterface CallbackExecutionRecord {\n readonly stream: PendingStream;\n readonly item: QueueItem;\n released: boolean;\n}\n\ninterface PendingBase {\n readonly callId: string;\n readonly capability: RemoteCapability;\n readonly reference: ServiceReference;\n readonly proxy: ProxyRecord;\n readonly controller: AbortController;\n readonly cleanup?: () => void;\n readonly reservation: QuotaReservation;\n readonly mode: \"unary\" | \"stream\";\n timer?: ReturnType<typeof setTimeout>;\n settled: boolean;\n cancelSent: boolean;\n}\n\ninterface PendingUnary extends PendingBase {\n readonly mode: \"unary\";\n resolve(value?: unknown): void;\n reject(error: unknown): void;\n}\n\ntype StreamState = \"opening\" | \"active\" | \"draining\" | \"closed\" | \"failed\";\n\ninterface PendingStream extends PendingBase {\n readonly mode: \"stream\";\n readonly onNext: (value: unknown) => void | Promise<void>;\n readonly itemParser: { parse(value: unknown): unknown };\n readonly window: number;\n readonly resolveReady: () => void;\n readonly rejectReady: (error: unknown) => void;\n readonly resolveClosed: () => void;\n readonly rejectClosed: (error: unknown) => void;\n credit: number;\n sequence: number;\n state: StreamState;\n doneReceived: boolean;\n processing: boolean;\n draining: boolean;\n readySettled: boolean;\n closedSettled: boolean;\n queue: QueueItem[];\n executionWaiterRemove?: () => void;\n}\n\ntype Pending = PendingUnary | PendingStream;\n\nfunction id(prefix: string): string {\n try {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") return `${prefix}:${crypto.randomUUID()}`;\n } catch { /* fallback */ }\n return `${prefix}:${Date.now().toString(36)}:${Math.random().toString(36).slice(2)}`;\n}\n\nfunction timeoutMs(value: number | undefined, fallback: number): number {\n const result = value ?? fallback;\n if (!Number.isFinite(result) || result < 1 || result > 300_000) throw new TypeError(\"timeoutMs must be a finite number from 1 to 300000\");\n return result;\n}\n\nfunction mergeSignals(...signals: readonly (AbortSignal | undefined)[]): { signal: AbortSignal; dispose(): void } {\n const controller = new AbortController();\n const active = signals.filter((signal): signal is AbortSignal => signal !== undefined);\n const listeners = active.map((signal) => {\n const listener = (): void => { try { controller.abort(signal.reason); } catch { controller.abort(); } };\n if (signal.aborted) listener(); else signal.addEventListener(\"abort\", listener, { once: true });\n return { signal, listener };\n });\n return { signal: controller.signal, dispose() { for (const item of listeners) item.signal.removeEventListener(\"abort\", item.listener); } };\n}\n\nfunction frameworkError(\n code: ConstructorParameters<typeof WebLoomError>[0],\n phase: ConstructorParameters<typeof WebLoomError>[2],\n context?: ConstructorParameters<typeof WebLoomError>[3],\n): WebLoomError {\n const text: Record<string, string> = {\n protocol_mismatch: \"Remote Runtime protocol is not supported\",\n capability_unavailable: \"Capability is unavailable\",\n request_validation_failed: \"Capability request failed validation\",\n response_validation_failed: \"Capability response failed validation\",\n request_clone_failed: \"Capability request could not be delivered\",\n response_clone_failed: \"Capability response could not be delivered\",\n transfer_invalid: \"Capability transfer declaration is invalid\",\n handler_failed: \"Remote capability operation failed\",\n call_timeout: \"Capability call timed out; remote side effect is unknown\",\n request_cancelled: \"Capability call was cancelled\",\n service_revoked: \"Capability exposure was revoked\",\n service_stale: \"Capability exposure is stale\",\n transport_unavailable: \"Runtime transport is unavailable\",\n stream_overflow: \"Stream credit or sequence is invalid\",\n resource_limit_exceeded: \"Runtime resource limit exceeded\",\n invalid_snapshot: \"Invalid Runtime snapshot\",\n invalid_message: \"Invalid WebLoom runtime message\",\n };\n return new WebLoomError(code, text[String(code)] ?? \"WebLoom operation failed\", phase, context);\n}\n\nfunction errorFromWire(message: RuntimeErrorResponseMessage): WebLoomError {\n return frameworkError(message.error.code, message.error.phase, { serviceInstanceId: message.serviceInstanceId });\n}\n\nfunction validCredit(value: number, maximum: number): boolean {\n return Number.isSafeInteger(value) && value >= 1 && value <= maximum;\n}\n\nfunction serviceMatches(reference: ServiceReference, capability: RemoteCapability): boolean {\n return reference.kind === capability.kind && reference.capabilityId === capability.id && reference.contractVersion === capability.version;\n}\n\nfunction serviceKey(service: Pick<ServiceReference, \"kind\" | \"capabilityId\" | \"contractVersion\">): string {\n return `${service.kind}\\u0000${service.capabilityId}\\u0000${service.contractVersion}`;\n}\n\nfunction contextFor(capability: RemoteCapability, reference?: ServiceReference): ConstructorParameters<typeof WebLoomError>[3] {\n return { capabilityId: capability.id, ...(reference ? { serviceInstanceId: reference.serviceInstanceId } : {}) };\n}\n\n/** 创建按 peer 绑定、可撤销且支持 typed stream 的 bridge。 */\nexport function createCapabilityBridge(options: CreateCapabilityBridgeOptions): CapabilityBridge & {\n readonly pendingCallCount: number;\n readonly activeStreamCount: number;\n readonly retainedPayloadBytes: number;\n} {\n const codec = createRuntimeMessageCodec();\n const limits = normalizeRuntimeLimits(options.limits);\n const budget = options.budget ?? createRuntimeBudget(limits);\n const listeners = new Set<() => void>();\n const pending = new Map<string, Pending>();\n const streams = new Map<string, PendingStream>();\n const waitingCalls = new Set<WaitingCallRecord>();\n const callbackExecutions = new Set<CallbackExecutionRecord>();\n const proxies = new Map<string, ProxyRecord>();\n const clients = new Map<string, CapabilityClient<RemoteCapability>>();\n let pendingCount = 0;\n let peerRetainedPayloadBytes = 0;\n let currentState: CapabilityBridge[\"state\"] = \"empty\";\n let terminalFailure: WebLoomError | undefined;\n let remoteRuntimeId: string | undefined;\n let remoteRuntimeKind: RuntimeKind | undefined;\n let remoteRuntimeInstanceId: string | undefined;\n let revision = -1;\n let appliedSnapshotFingerprint: string | undefined;\n let currentServices: readonly ServiceReference[] = [];\n let disposed = false;\n let reservedStreamCount = 0;\n const defaultTimeout = timeoutMs(options.defaultCallTimeoutMs, 30_000);\n\n const emit = (): void => {\n for (const listener of [...listeners]) { try { listener(); } catch { /* observer isolation */ } }\n };\n\n const reserve = (payloadBytes: number, stream: boolean): QuotaReservation | WebLoomError => {\n if (pendingCount >= limits.maxPendingCallsPerPeer || budget.pendingCalls >= limits.maxPendingCallsPerRuntime) return frameworkError(\"resource_limit_exceeded\", \"dispatch\");\n if (stream && (reservedStreamCount >= limits.maxActiveStreamsPerPeer || budget.activeStreams >= limits.maxActiveStreamsPerRuntime)) return frameworkError(\"resource_limit_exceeded\", \"dispatch\");\n if (payloadBytes > limits.maxMessageBudgetBytes\n || peerRetainedPayloadBytes > limits.maxRetainedPayloadBytesPerPeer - payloadBytes\n || budget.retainedPayloadBytes > limits.maxRetainedPayloadBytesPerRuntime - payloadBytes) return frameworkError(\"resource_limit_exceeded\", \"dispatch\");\n budget.pendingCalls += 1;\n if (stream) budget.activeStreams += 1;\n peerRetainedPayloadBytes += payloadBytes;\n budget.retainedPayloadBytes += payloadBytes;\n pendingCount += 1;\n if (stream) reservedStreamCount += 1;\n return { payloadBytes, pendingReserved: true, streamReserved: stream, payloadReserved: true };\n };\n\n const releasePendingReservation = (reservation: QuotaReservation): void => {\n if (!reservation.pendingReserved) return;\n reservation.pendingReserved = false;\n pendingCount = Math.max(0, pendingCount - 1);\n budget.pendingCalls = Math.max(0, budget.pendingCalls - 1);\n };\n\n const releaseStreamReservation = (reservation: QuotaReservation): void => {\n if (!reservation.streamReserved) return;\n reservation.streamReserved = false;\n reservedStreamCount = Math.max(0, reservedStreamCount - 1);\n budget.activeStreams = Math.max(0, budget.activeStreams - 1);\n };\n\n const releasePayloadReservation = (reservation: QuotaReservation): void => {\n if (!reservation.payloadReserved) return;\n reservation.payloadReserved = false;\n peerRetainedPayloadBytes = Math.max(0, peerRetainedPayloadBytes - reservation.payloadBytes);\n budget.retainedPayloadBytes = Math.max(0, budget.retainedPayloadBytes - reservation.payloadBytes);\n };\n\n const releaseReservation = (reservation: QuotaReservation): void => {\n releasePendingReservation(reservation);\n releaseStreamReservation(reservation);\n releasePayloadReservation(reservation);\n };\n\n const releaseCallbackExecution = (record: CallbackExecutionRecord): void => {\n if (record.released) return;\n record.released = true;\n callbackExecutions.delete(record);\n peerRetainedPayloadBytes = Math.max(0, peerRetainedPayloadBytes - record.item.budgetBytes);\n budget.retainedPayloadBytes = Math.max(0, budget.retainedPayloadBytes - record.item.budgetBytes);\n budget.releaseExecutionSlot();\n emit();\n };\n\n const releaseQueueItem = (item: QueueItem): void => {\n item.ledger.closeUndelivered();\n peerRetainedPayloadBytes = Math.max(0, peerRetainedPayloadBytes - item.budgetBytes);\n budget.retainedPayloadBytes = Math.max(0, budget.retainedPayloadBytes - item.budgetBytes);\n };\n\n const settleUnary = (entry: PendingUnary, error?: unknown, value?: unknown): void => {\n if (entry.settled) return;\n entry.settled = true;\n if (entry.timer !== undefined) clearTimeout(entry.timer);\n pending.delete(entry.callId);\n releaseReservation(entry.reservation);\n entry.cleanup?.();\n if (error !== undefined) entry.reject(error); else entry.resolve(value);\n emit();\n };\n\n const sendCancel = (entry: PendingBase): void => {\n if (entry.cancelSent) return;\n entry.cancelSent = true;\n try {\n options.transport.send({ type: RUNTIME_CANCEL_TYPE, protocolVersion: RUNTIME_PROTOCOL_VERSION, callId: entry.callId, serviceInstanceId: entry.reference.serviceInstanceId });\n } catch { /* connection is already unavailable */ }\n try { entry.controller.abort(); } catch { /* noop */ }\n };\n\n const settleReadyReject = (stream: PendingStream, error: unknown): void => {\n if (stream.readySettled) return;\n stream.readySettled = true;\n stream.rejectReady(error);\n };\n\n const settleClosedReject = (stream: PendingStream, error: unknown): void => {\n if (stream.closedSettled) return;\n stream.closedSettled = true;\n stream.rejectClosed(error);\n };\n\n const settleClosedResolve = (stream: PendingStream): void => {\n if (stream.closedSettled) return;\n stream.closedSettled = true;\n stream.resolveClosed();\n };\n\n const forgetStream = (stream: PendingStream): void => {\n if (!stream.closedSettled || stream.processing || stream.queue.length > 0) return;\n streams.delete(stream.callId);\n };\n\n const finishDraining = (stream: PendingStream): void => {\n if (!stream.doneReceived || stream.processing || stream.queue.length > 0 || stream.closedSettled) return;\n stream.state = \"closed\";\n settleClosedResolve(stream);\n forgetStream(stream);\n emit();\n };\n\n const terminateStream = (stream: PendingStream, error: WebLoomError, notifyRemote: boolean): void => {\n if (stream.state === \"closed\" || stream.state === \"failed\") return;\n stream.state = \"failed\";\n if (stream.timer !== undefined) clearTimeout(stream.timer);\n pending.delete(stream.callId);\n stream.executionWaiterRemove?.();\n stream.executionWaiterRemove = undefined;\n releaseReservation(stream.reservation);\n // Even when the remote cancel cannot be sent (for example after a\n // transport error), the local handler-facing signal must be fenced.\n try { stream.controller.abort(error); } catch { /* already aborted */ }\n for (const item of stream.queue.splice(0)) releaseQueueItem(item);\n if (!stream.readySettled) settleReadyReject(stream, error);\n settleClosedReject(stream, error);\n stream.cleanup?.();\n if (notifyRemote) sendCancel(stream);\n forgetStream(stream);\n emit();\n };\n\n const errorWithTerminalCause = (cause: WebLoomError, capability: RemoteCapability, reference?: ServiceReference): WebLoomError => (\n new WebLoomError(cause.code, cause.message, cause.phase, { ...cause.context, ...contextFor(capability, reference) }, cause.details)\n );\n\n const revokeProxy = (proxy: ProxyRecord, reason: string, terminalCause?: WebLoomError): void => {\n if (proxy.revoked) return;\n proxy.revoked = true;\n proxy.reason = reason;\n if (proxies.get(proxy.cacheKey) === proxy) clients.delete(proxy.cacheKey);\n const affected = new Set<Pending>();\n for (const entry of pending.values()) if (entry.proxy === proxy) affected.add(entry);\n for (const entry of streams.values()) if (entry.proxy === proxy) affected.add(entry);\n for (const entry of affected) {\n if (entry.proxy !== proxy) continue;\n const error = terminalCause\n ? errorWithTerminalCause(terminalCause, entry.capability, entry.reference)\n : frameworkError(\"service_revoked\", \"dispose\", contextFor(entry.capability, entry.reference));\n if (entry.mode === \"stream\") terminateStream(entry as PendingStream, error, true);\n else {\n settleUnary(entry as PendingUnary, error);\n sendCancel(entry);\n }\n }\n for (const record of [...waitingCalls]) {\n if (record.proxy === proxy) record.fail(terminalCause\n ? errorWithTerminalCause(terminalCause, record.proxy.capability, record.proxy.bound)\n : frameworkError(\"service_revoked\", \"dispose\", contextFor(record.proxy.capability, record.proxy.bound)));\n }\n };\n\n const findService = (capability: RemoteCapability): ServiceReference | undefined => currentServices.find((service) => serviceMatches(service, capability));\n\n const terminalError = (proxy: ProxyRecord, capability: RemoteCapability): WebLoomError | undefined => {\n if (terminalFailure && !disposed) return frameworkError(terminalFailure.code, terminalFailure.phase, contextFor(capability, proxy.bound));\n if (disposed || proxy.revoked) return frameworkError(\"service_revoked\", \"dispatch\", contextFor(capability, proxy.bound));\n if (currentState === \"stale\" || currentState === \"disposed\") return frameworkError(\"service_revoked\", \"dispatch\", contextFor(capability, proxy.bound));\n if (proxy.bound && !currentServices.some((service) => serviceKey(service) === serviceKey(proxy.bound as ServiceReference) && service.serviceInstanceId === proxy.bound?.serviceInstanceId)) {\n return frameworkError(\"service_stale\", \"dispatch\", contextFor(capability, proxy.bound));\n }\n // Before the first ready snapshot a lazy proxy must remain waitable. Once\n // the peer has published a ready projection, however, an unbound\n // capability absent from that projection is not a timeout oracle: callers\n // must observe the same redacted unavailable result as a peer allowlist\n // denial. A proxy bound to a previously visible exposure still gets the\n // more specific stale result above.\n if (currentState === \"ready\" && !proxy.bound && !findService(capability)) {\n return frameworkError(\"capability_unavailable\", \"wait\", contextFor(capability));\n }\n return undefined;\n };\n\n const prepareRequest = (capability: RemoteCapability, request: unknown): { value: unknown; transfer: readonly Transferable[]; budgetBytes: number } => {\n validateRawDto(request, limits, \"validate\");\n const parser = capability as RemoteCapability & { request: { parse(value: unknown): unknown } };\n let parsed: unknown;\n try { parsed = parser.request.parse(request); } catch { throw frameworkError(\"request_validation_failed\", \"validate\", contextFor(capability)); }\n let validation: ReturnType<typeof validateTransferListWithStats>;\n try {\n const descriptor = (capability as RemoteCapability & { transfer?: { request?: (value: unknown) => readonly Transferable[] } }).transfer;\n validation = validateTransferListWithStats(parsed, descriptor?.request?.(parsed), { limits, phase: \"validate\" });\n } catch (error) {\n if (error instanceof WebLoomError) throw error;\n throw frameworkError(\"transfer_invalid\", \"validate\", contextFor(capability));\n }\n return { value: parsed, transfer: validation.transfer, budgetBytes: validation.stats.budgetBytes };\n };\n\n const prepareIncoming = (capability: RemoteCapability, value: unknown, direction: \"response\" | \"item\", ledger: ReceivePortLedger): { value: unknown; transfer: readonly Transferable[]; stats: ReturnType<typeof validateDto> } => {\n try { validateRawDto(value, limits, \"receive\"); } catch (error) { ledger.closeUndelivered(); throw error; }\n const parser = capability as RemoteCapability & { response?: { parse(value: unknown): unknown }; item?: { parse(value: unknown): unknown }; transfer?: { response?: (value: unknown) => readonly Transferable[]; item?: (value: unknown) => readonly Transferable[] } };\n let parsed: unknown;\n try {\n const selected = direction === \"response\" ? parser.response : parser.item;\n if (!selected) throw new Error(\"parser unavailable\");\n parsed = selected.parse(value);\n } catch { ledger.closeUndelivered(); throw frameworkError(\"response_validation_failed\", \"receive\", contextFor(capability)); }\n let validation: ReturnType<typeof validateTransferListWithStats>;\n try { validation = validateTransferListWithStats(parsed, parser.transfer?.[direction]?.(parsed), { limits, phase: \"receive\" }); }\n catch (error) { ledger.closeUndelivered(); throw error instanceof WebLoomError ? error : frameworkError(\"transfer_invalid\", \"receive\", contextFor(capability)); }\n try { assertReceivedPortSet(ledger, validation.transfer, { limits, phase: \"receive\" }); }\n catch (error) { ledger.closeUndelivered(); throw error; }\n return { value: parsed, transfer: validation.transfer, stats: validation.stats };\n };\n\n const sendWire = (message: RuntimeWireMessage, transfer: readonly Transferable[] = []): void => {\n const encoded = codec.encode(message);\n options.transport.send(encoded, transfer);\n };\n\n const startUnary = (proxy: ProxyRecord, prepared: { value: unknown; transfer: readonly Transferable[]; budgetBytes: number }, reference: ServiceReference, callOptions: RpcCallOptions, timeout: number, existingReservation?: QuotaReservation): Promise<unknown> => {\n const reservation = existingReservation ?? reserve(prepared.budgetBytes, false);\n if (reservation instanceof WebLoomError) return Promise.reject(reservation);\n const controller = new AbortController();\n const merged = mergeSignals(controller.signal, proxy.scope?.signal, callOptions.signal);\n const callId = id(\"call\");\n return new Promise<unknown>((resolve, reject) => {\n const entry: PendingUnary = { callId, capability: proxy.capability, reference, proxy, controller, cleanup: merged.dispose, reservation, timer: undefined, settled: false, cancelSent: false, mode: \"unary\", resolve, reject };\n pending.set(callId, entry);\n const onAbort = (): void => {\n if (entry.settled) return;\n settleUnary(entry, frameworkError(\"request_cancelled\", \"dispose\", contextFor(entry.capability, reference)));\n sendCancel(entry);\n };\n merged.signal.addEventListener(\"abort\", onAbort, { once: true });\n entry.timer = setTimeout(() => {\n if (entry.settled) return;\n settleUnary(entry, frameworkError(\"call_timeout\", \"receive\", contextFor(entry.capability, reference)));\n sendCancel(entry);\n }, timeout);\n if (merged.signal.aborted) { onAbort(); return; }\n try {\n sendWire({ type: RUNTIME_CALL_TYPE, protocolVersion: RUNTIME_PROTOCOL_VERSION, callId, capabilityId: entry.capability.id, contractVersion: entry.capability.version, serviceInstanceId: reference.serviceInstanceId, mode: \"unary\", timeoutMs: timeout, request: prepared.value, ...(callOptions.operationId !== undefined ? { operationId: callOptions.operationId } : {}) }, prepared.transfer);\n } catch {\n settleUnary(entry, frameworkError(\"request_clone_failed\", \"dispatch\", contextFor(entry.capability, reference)));\n }\n });\n };\n\n const waitForService = (proxy: ProxyRecord, prepared: { value: unknown; transfer: readonly Transferable[]; budgetBytes: number }, callOptions: RpcCallOptions): Promise<unknown> => {\n const timeout = timeoutMs(callOptions.timeoutMs, defaultTimeout);\n const deadline = Date.now() + timeout;\n const reserved = reserve(prepared.budgetBytes, false);\n if (reserved instanceof WebLoomError) return Promise.reject(reserved);\n return new Promise<unknown>((resolve, reject) => {\n const record: WaitingCallRecord = {\n proxy,\n prepared,\n reservation: reserved,\n deadline,\n mode: \"unary\",\n finished: false,\n fail: () => undefined,\n start: () => undefined,\n };\n const cleanup = (): void => { if (record.timer !== undefined) clearTimeout(record.timer); record.removeListener?.(); callOptions.signal?.removeEventListener(\"abort\", onAbort); waitingCalls.delete(record); };\n record.fail = (error: unknown): void => {\n if (record.finished) return;\n record.finished = true;\n cleanup();\n releaseReservation(record.reservation);\n reject(error);\n };\n record.start = (reference: ServiceReference, remaining: number): void => {\n if (record.finished) return;\n record.finished = true;\n cleanup();\n if (!proxy.bound) proxy.bound = reference;\n void startUnary(proxy, prepared, reference, callOptions, remaining, record.reservation).then(resolve, reject);\n };\n const check = (): void => {\n if (record.finished) return;\n const unavailable = terminalError(proxy, proxy.capability);\n if (unavailable) { record.fail(unavailable); return; }\n const reference = proxy.bound ?? findService(proxy.capability);\n if (!reference) return;\n const remaining = deadline - Date.now();\n if (remaining <= 0) { record.fail(frameworkError(\"call_timeout\", \"wait\", contextFor(proxy.capability))); return; }\n record.start(reference, remaining);\n };\n const onAbort = (): void => record.fail(frameworkError(\"request_cancelled\", \"dispose\", contextFor(proxy.capability)));\n record.timer = setTimeout(() => record.fail(frameworkError(\"call_timeout\", \"wait\", contextFor(proxy.capability))), timeout);\n if (callOptions.signal) {\n if (callOptions.signal.aborted) { onAbort(); return; }\n callOptions.signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n listeners.add(check);\n record.removeListener = () => listeners.delete(check);\n waitingCalls.add(record);\n check();\n });\n };\n\n const call = (proxy: ProxyRecord, request: unknown, callOptions: RpcCallOptions): Promise<unknown> => {\n const unavailable = terminalError(proxy, proxy.capability);\n if (unavailable) return Promise.reject(unavailable);\n const timeout = timeoutMs(callOptions.timeoutMs, defaultTimeout);\n let prepared: { value: unknown; transfer: readonly Transferable[]; budgetBytes: number };\n try { prepared = prepareRequest(proxy.capability, request); }\n catch (error) { return Promise.reject(error instanceof WebLoomError ? error : frameworkError(\"request_validation_failed\", \"validate\", contextFor(proxy.capability))); }\n const reference = proxy.bound ?? findService(proxy.capability);\n if (!reference) return waitForService(proxy, prepared, callOptions);\n if (!proxy.bound) proxy.bound = reference;\n return startUnary(proxy, prepared, reference, callOptions, timeout);\n };\n\n const createRejectedSubscription = (error: WebLoomError): StreamSubscription<unknown> => {\n let readyReject!: (reason: unknown) => void;\n let closedReject!: (reason: unknown) => void;\n const ready = new Promise<void>((_, reject) => { readyReject = reject; });\n const closed = new Promise<void>((_, reject) => { closedReject = reject; });\n void ready.catch(() => undefined);\n void closed.catch(() => undefined);\n readyReject(error);\n closedReject(error);\n return { ready, closed, cancel() { /* terminal */ } };\n };\n\n const startStream = (proxy: ProxyRecord, prepared: { value: unknown; transfer: readonly Transferable[]; budgetBytes: number }, reference: ServiceReference, optionsForSubscribe: StreamSubscribeOptions<unknown>, timeout: number, existingReservation?: QuotaReservation): StreamSubscription<unknown> => {\n const maximumCredit = Math.min(256, limits.maxStreamCredit);\n const window = optionsForSubscribe.initialCredit ?? 16;\n if (!validCredit(window, maximumCredit)) {\n if (existingReservation) releaseReservation(existingReservation);\n return createRejectedSubscription(frameworkError(\"stream_overflow\", \"validate\", contextFor(proxy.capability, reference)));\n }\n const reservation = existingReservation ?? reserve(prepared.budgetBytes, true);\n if (reservation instanceof WebLoomError) return createRejectedSubscription(reservation);\n let resolveReady!: () => void;\n let rejectReady!: (error: unknown) => void;\n let resolveClosed!: () => void;\n let rejectClosed!: (error: unknown) => void;\n const ready = new Promise<void>((resolve, reject) => { resolveReady = resolve; rejectReady = reject; });\n const closed = new Promise<void>((resolve, reject) => { resolveClosed = resolve; rejectClosed = reject; });\n void ready.catch(() => undefined);\n void closed.catch(() => undefined);\n const controller = new AbortController();\n const merged = mergeSignals(controller.signal, proxy.scope?.signal, optionsForSubscribe.signal);\n const callId = id(\"stream\");\n const entry: PendingStream = {\n callId, capability: proxy.capability, reference, proxy, controller, cleanup: merged.dispose, reservation, timer: undefined, settled: false, cancelSent: false,\n mode: \"stream\", onNext: optionsForSubscribe.onNext, itemParser: (proxy.capability as StreamCapabilityBase & { item: { parse(value: unknown): unknown } }).item,\n window, credit: window, sequence: 1, state: \"opening\", doneReceived: false, processing: false, draining: false, readySettled: false, closedSettled: false, queue: [],\n resolveReady, rejectReady, resolveClosed, rejectClosed,\n };\n streams.set(callId, entry);\n pending.set(callId, entry);\n const cancel = (): void => {\n if (entry.state === \"closed\" || entry.state === \"failed\") return;\n terminateStream(entry, frameworkError(\"request_cancelled\", \"dispose\", contextFor(entry.capability, reference)), true);\n };\n merged.signal.addEventListener(\"abort\", cancel, { once: true });\n entry.timer = setTimeout(() => {\n if (entry.state !== \"opening\") return;\n terminateStream(entry, frameworkError(\"call_timeout\", \"wait\", contextFor(entry.capability, reference)), true);\n }, timeout);\n if (merged.signal.aborted) { cancel(); return { ready, closed, cancel }; }\n try {\n sendWire({ type: RUNTIME_CALL_TYPE, protocolVersion: RUNTIME_PROTOCOL_VERSION, callId, capabilityId: entry.capability.id, contractVersion: entry.capability.version, serviceInstanceId: reference.serviceInstanceId, mode: \"stream\", timeoutMs: timeout, request: prepared.value, initialCredit: window, ...(optionsForSubscribe.operationId !== undefined ? { operationId: optionsForSubscribe.operationId } : {}) }, prepared.transfer);\n } catch {\n terminateStream(entry, frameworkError(\"request_clone_failed\", \"dispatch\", contextFor(entry.capability, reference)), false);\n }\n return { ready, closed, cancel };\n };\n\n const waitForStream = (proxy: ProxyRecord, prepared: { value: unknown; transfer: readonly Transferable[]; budgetBytes: number }, optionsForSubscribe: StreamSubscribeOptions<unknown>): StreamSubscription<unknown> => {\n const timeout = timeoutMs(optionsForSubscribe.timeoutMs, defaultTimeout);\n const deadline = Date.now() + timeout;\n const reserved = reserve(prepared.budgetBytes, true);\n if (reserved instanceof WebLoomError) return createRejectedSubscription(reserved);\n let resolveReady!: () => void;\n let rejectReady!: (error: unknown) => void;\n let resolveClosed!: () => void;\n let rejectClosed!: (error: unknown) => void;\n const ready = new Promise<void>((resolve, reject) => { resolveReady = resolve; rejectReady = reject; });\n const closed = new Promise<void>((resolve, reject) => { resolveClosed = resolve; rejectClosed = reject; });\n void ready.catch(() => undefined);\n void closed.catch(() => undefined);\n let active: StreamSubscription<unknown> | undefined;\n const record: WaitingCallRecord = {\n proxy,\n prepared,\n reservation: reserved,\n deadline,\n mode: \"stream\",\n finished: false,\n fail: () => undefined,\n start: () => undefined,\n };\n const cleanup = (): void => { if (record.timer !== undefined) clearTimeout(record.timer); record.removeListener?.(); optionsForSubscribe.signal?.removeEventListener(\"abort\", onAbort); waitingCalls.delete(record); };\n record.fail = (error: unknown): void => { if (record.finished) return; record.finished = true; cleanup(); releaseReservation(record.reservation); rejectReady(error); rejectClosed(error); };\n record.start = (reference: ServiceReference, remaining: number): void => {\n if (record.finished) return;\n record.finished = true;\n cleanup();\n if (!proxy.bound) proxy.bound = reference;\n active = startStream(proxy, prepared, reference, optionsForSubscribe, remaining, record.reservation);\n active.ready.then(resolveReady, rejectReady);\n active.closed.then(resolveClosed, rejectClosed);\n };\n const onAbort = (): void => record.fail(frameworkError(\"request_cancelled\", \"dispose\", contextFor(proxy.capability)));\n const check = (): void => {\n if (record.finished) return;\n const unavailable = terminalError(proxy, proxy.capability);\n if (unavailable) { record.fail(unavailable); return; }\n const reference = proxy.bound ?? findService(proxy.capability);\n if (!reference) return;\n const remaining = deadline - Date.now();\n if (remaining <= 0) { record.fail(frameworkError(\"call_timeout\", \"wait\", contextFor(proxy.capability))); return; }\n record.start(reference, remaining);\n };\n record.timer = setTimeout(() => record.fail(frameworkError(\"call_timeout\", \"wait\", contextFor(proxy.capability))), timeout);\n if (optionsForSubscribe.signal) {\n if (optionsForSubscribe.signal.aborted) { onAbort(); return { ready, closed, cancel() { /* terminal */ } }; }\n optionsForSubscribe.signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n listeners.add(check);\n record.removeListener = () => listeners.delete(check);\n waitingCalls.add(record);\n check();\n return { ready, closed, cancel(reason = \"stream cancelled\") { void reason; if (active) active.cancel(reason); else record.fail(frameworkError(\"request_cancelled\", \"dispose\", contextFor(proxy.capability))); } };\n };\n\n const subscribe = (proxy: ProxyRecord, request: unknown, optionsForSubscribe: StreamSubscribeOptions<unknown>): StreamSubscription<unknown> => {\n const unavailable = terminalError(proxy, proxy.capability);\n if (unavailable) return createRejectedSubscription(unavailable);\n if (typeof optionsForSubscribe.onNext !== \"function\") return createRejectedSubscription(frameworkError(\"request_validation_failed\", \"validate\", contextFor(proxy.capability)));\n let prepared: { value: unknown; transfer: readonly Transferable[]; budgetBytes: number };\n try { prepared = prepareRequest(proxy.capability, request); }\n catch (error) { return createRejectedSubscription(error instanceof WebLoomError ? error : frameworkError(\"request_validation_failed\", \"validate\", contextFor(proxy.capability))); }\n const reference = proxy.bound ?? findService(proxy.capability);\n if (!reference) return waitForStream(proxy, prepared, optionsForSubscribe);\n if (!proxy.bound) proxy.bound = reference;\n return startStream(proxy, prepared, reference, optionsForSubscribe, timeoutMs(optionsForSubscribe.timeoutMs, defaultTimeout));\n };\n\n let drainStream: (stream: PendingStream) => void;\n const waitForExecutionSlot = (stream: PendingStream): void => {\n if (stream.executionWaiterRemove || stream.state === \"failed\" || stream.state === \"closed\" || stream.queue.length === 0) return;\n stream.executionWaiterRemove = budget.registerExecutionWaiter(() => {\n stream.executionWaiterRemove = undefined;\n drainStream(stream);\n });\n };\n drainStream = (stream: PendingStream): void => {\n if (stream.draining) return;\n stream.draining = true;\n void (async () => {\n try {\n while (stream.queue.length > 0) {\n if (stream.state === \"failed\" || stream.state === \"closed\") break;\n const item = stream.queue.shift();\n if (!item) break;\n if (callbackExecutions.size >= limits.maxExecutionSlotsPerPeer || budget.executionSlots >= limits.maxExecutionSlotsPerRuntime) {\n stream.queue.unshift(item);\n waitForExecutionSlot(stream);\n break;\n }\n stream.executionWaiterRemove?.();\n stream.executionWaiterRemove = undefined;\n const execution: CallbackExecutionRecord = { stream, item, released: false };\n callbackExecutions.add(execution);\n budget.executionSlots += 1;\n stream.processing = true;\n try {\n // MessagePort resources become handler-owned immediately before\n // invoking user code. The byte reservation remains attached to the\n // execution record until that callback settles.\n item.ledger.handoff();\n await stream.onNext(item.value);\n if (stream.state === \"active\" && !stream.doneReceived) {\n stream.credit += 1;\n try { sendWire({ type: RUNTIME_CREDIT_TYPE, protocolVersion: RUNTIME_PROTOCOL_VERSION, callId: stream.callId, serviceInstanceId: stream.reference.serviceInstanceId, count: 1 }); }\n catch { terminateStream(stream, frameworkError(\"transport_unavailable\", \"dispatch\", contextFor(stream.capability, stream.reference)), true); break; }\n }\n } catch {\n terminateStream(stream, frameworkError(\"handler_failed\", \"execute\", contextFor(stream.capability, stream.reference)), true);\n break;\n } finally {\n stream.processing = false;\n releaseCallbackExecution(execution);\n }\n }\n } finally {\n stream.processing = false;\n stream.draining = false;\n if (stream.queue.length === 0 || stream.state === \"failed\" || stream.state === \"closed\") {\n stream.executionWaiterRemove?.();\n stream.executionWaiterRemove = undefined;\n } else {\n // The loop can stop with an item retained because the shared budget\n // is full. Keep that FIFO waiter registered after this drain task\n // yields; otherwise no later slot release would revisit this stream.\n waitForExecutionSlot(stream);\n }\n finishDraining(stream);\n forgetStream(stream);\n }\n })().catch(() => {\n terminateStream(stream, frameworkError(\"handler_failed\", \"execute\", contextFor(stream.capability, stream.reference)), true);\n });\n };\n\n const invalidate = (reason = \"remote service directory replaced\", terminalCause?: WebLoomError): void => {\n // A terminal protocol/transport failure is the cause observed by every\n // affected request. Settle it before revoking proxies, otherwise the proxy\n // fence would replace the useful protocol error with service_revoked.\n if (terminalCause) {\n for (const record of [...waitingCalls]) record.fail(errorWithTerminalCause(terminalCause, record.proxy.capability, record.proxy.bound));\n for (const entry of [...pending.values()]) {\n const error = errorWithTerminalCause(terminalCause, entry.capability, entry.reference);\n if (entry.mode === \"stream\") terminateStream(entry, error, true);\n else settleUnary(entry, error);\n }\n }\n for (const proxy of proxies.values()) revokeProxy(proxy, reason, terminalCause);\n if (!terminalCause) for (const record of [...waitingCalls]) record.fail(frameworkError(\"service_stale\", \"dispose\", contextFor(record.proxy.capability, record.proxy.bound)));\n clients.clear();\n if (!terminalCause) for (const entry of [...pending.values()]) {\n if (entry.mode === \"stream\") terminateStream(entry, frameworkError(\"service_stale\", \"dispose\", contextFor(entry.capability, entry.reference)), true);\n else settleUnary(entry, frameworkError(\"service_stale\", \"dispose\", contextFor(entry.capability, entry.reference)));\n }\n currentServices = [];\n currentState = disposed ? \"disposed\" : \"stale\";\n emit();\n };\n\n const failClose = (reason: string, code: \"protocol_mismatch\" | \"invalid_snapshot\" | \"invalid_message\" | \"transfer_invalid\" = \"invalid_message\"): void => {\n if (disposed) return;\n terminalFailure = frameworkError(code, \"receive\");\n invalidate(reason, terminalFailure);\n try { options.transport.close?.(); } catch { /* best effort */ }\n };\n\n const onMessage = (message: RuntimeWireMessage, metadata?: RuntimeReceiveMetadata): void => {\n const ledger = metadata?.ledger ?? createReceivePortLedger(metadata?.ports, { limits, phase: \"receive\" });\n if (!ledger.valid) {\n failClose(\"Invalid received transfer metadata\", \"transfer_invalid\");\n return;\n }\n try {\n if (!metadata?.decoded) {\n message = codec.decode(message);\n }\n } catch (error) {\n ledger.closeUndelivered();\n if (error instanceof WebLoomError && error.code === \"protocol_mismatch\") {\n failClose(\"Remote Runtime protocol mismatch\", \"protocol_mismatch\");\n } else if (error instanceof WebLoomError && error.code === \"invalid_snapshot\") {\n failClose(\"Invalid WebLoom runtime message\", \"invalid_snapshot\");\n } else failClose(\"Invalid WebLoom runtime message\", \"invalid_message\");\n return;\n }\n try {\n // A Runtime connection has one physical bidirectional port. Incoming\n // call/cancel/credit messages belong to the peer-side Provider listener;\n // this bridge must leave its event.ports ledger untouched so that the\n // Provider can validate and hand off business resources.\n if (message.type === RUNTIME_CALL_TYPE || message.type === RUNTIME_CANCEL_TYPE || message.type === RUNTIME_CREDIT_TYPE) return;\n if (message.type === RUNTIME_SNAPSHOT_TYPE) {\n if (ledger.ports.length > 0) throw frameworkError(\"transfer_invalid\", \"receive\");\n const result = applySnapshot(message);\n if (!result.accepted && result.reason === \"protocol-mismatch\") failClose(\"Remote Runtime protocol mismatch\", \"protocol_mismatch\");\n else if (!result.accepted && result.reason === \"invalid-snapshot\") failClose(\"Invalid Runtime snapshot\", \"invalid_snapshot\");\n return;\n }\n if (message.type === RUNTIME_ERROR_TYPE) { ledger.closeUndelivered(); invalidate(message.message); return; }\n if (message.type === RUNTIME_RESULT_TYPE) {\n const entry = pending.get(message.callId);\n if (!entry || entry.reference.serviceInstanceId !== message.serviceInstanceId) { ledger.closeUndelivered(); return; }\n if (entry.mode === \"unary\") {\n if (!(\"result\" in message)) { ledger.closeUndelivered(); settleUnary(entry, frameworkError(\"invalid_message\", \"receive\", contextFor(entry.capability, entry.reference))); return; }\n try {\n const incoming = prepareIncoming(entry.capability, message.result, \"response\", ledger);\n ledger.handoff();\n settleUnary(entry, undefined, incoming.value);\n } catch (error) { settleUnary(entry, error instanceof WebLoomError ? error : frameworkError(\"response_validation_failed\", \"receive\", contextFor(entry.capability, entry.reference))); }\n return;\n }\n const stream = entry as PendingStream;\n if (\"streamReady\" in message && message.streamReady) {\n if (stream.state !== \"opening\") { ledger.closeUndelivered(); terminateStream(stream, frameworkError(\"invalid_message\", \"receive\", contextFor(stream.capability, stream.reference)), true); return; }\n if (ledger.ports.length > 0) { ledger.closeUndelivered(); terminateStream(stream, frameworkError(\"transfer_invalid\", \"receive\", contextFor(stream.capability, stream.reference)), true); return; }\n stream.state = \"active\";\n stream.readySettled = true;\n if (stream.timer !== undefined) clearTimeout(stream.timer);\n releasePendingReservation(stream.reservation);\n stream.resolveReady();\n emit();\n return;\n }\n if (\"done\" in message && message.done) {\n if (stream.state !== \"active\" || stream.doneReceived) { ledger.closeUndelivered(); terminateStream(stream, frameworkError(\"invalid_message\", \"receive\", contextFor(stream.capability, stream.reference)), true); return; }\n if (ledger.ports.length > 0) { ledger.closeUndelivered(); terminateStream(stream, frameworkError(\"transfer_invalid\", \"receive\", contextFor(stream.capability, stream.reference)), true); return; }\n stream.doneReceived = true;\n stream.state = \"draining\";\n pending.delete(stream.callId);\n releaseStreamReservation(stream.reservation);\n releasePayloadReservation(stream.reservation);\n stream.cleanup?.();\n finishDraining(stream);\n drainStream(stream);\n emit();\n return;\n }\n ledger.closeUndelivered();\n terminateStream(stream, frameworkError(\"invalid_message\", \"receive\", contextFor(stream.capability, stream.reference)), true);\n return;\n }\n if (message.type === RUNTIME_ERROR_MESSAGE_TYPE) {\n const entry = pending.get(message.callId);\n if (!entry || entry.reference.serviceInstanceId !== message.serviceInstanceId) { ledger.closeUndelivered(); return; }\n ledger.closeUndelivered();\n const error = errorFromWire(message);\n if (entry.mode === \"stream\") terminateStream(entry as PendingStream, error, false);\n else settleUnary(entry, error);\n return;\n }\n if (message.type === RUNTIME_NEXT_TYPE) {\n const entry = pending.get(message.callId);\n if (!entry || entry.mode !== \"stream\" || entry.reference.serviceInstanceId !== message.serviceInstanceId) { ledger.closeUndelivered(); return; }\n const stream = entry as PendingStream;\n if (stream.state !== \"active\" || stream.doneReceived) { ledger.closeUndelivered(); terminateStream(stream, frameworkError(\"invalid_message\", \"receive\", contextFor(stream.capability, stream.reference)), true); return; }\n if (stream.credit < 1) { ledger.closeUndelivered(); terminateStream(stream, frameworkError(\"stream_overflow\", \"receive\", contextFor(stream.capability, stream.reference)), true); return; }\n if (message.sequence !== stream.sequence) { ledger.closeUndelivered(); terminateStream(stream, frameworkError(\"stream_overflow\", \"receive\", contextFor(stream.capability, stream.reference)), true); return; }\n let incoming: ReturnType<typeof prepareIncoming>;\n try { incoming = prepareIncoming(stream.capability, message.item, \"item\", ledger); }\n catch (error) { terminateStream(stream, error instanceof WebLoomError ? error : frameworkError(\"response_validation_failed\", \"receive\", contextFor(stream.capability, stream.reference)), true); return; }\n const { value, stats } = incoming;\n if (peerRetainedPayloadBytes > limits.maxRetainedPayloadBytesPerPeer - stats.budgetBytes\n || budget.retainedPayloadBytes > limits.maxRetainedPayloadBytesPerRuntime - stats.budgetBytes\n || stream.queue.length >= stream.window) { ledger.closeUndelivered(); terminateStream(stream, frameworkError(\"resource_limit_exceeded\", \"receive\", contextFor(stream.capability, stream.reference)), true); return; }\n stream.credit -= 1;\n stream.sequence += 1;\n stream.queue.push({ value, ledger, budgetBytes: stats.budgetBytes });\n peerRetainedPayloadBytes += stats.budgetBytes;\n budget.retainedPayloadBytes += stats.budgetBytes;\n drainStream(stream);\n return;\n }\n ledger.closeUndelivered();\n } catch (error) {\n ledger.closeUndelivered();\n if (error instanceof WebLoomError && error.code === \"protocol_mismatch\") failClose(\"Remote Runtime protocol mismatch\", \"protocol_mismatch\");\n else if (error instanceof WebLoomError && error.code === \"invalid_snapshot\") failClose(\"Invalid WebLoom runtime message\", \"invalid_snapshot\");\n else if (error instanceof WebLoomError && error.code === \"transfer_invalid\") failClose(\"Invalid WebLoom runtime message\", \"transfer_invalid\");\n else failClose(\"Invalid WebLoom runtime message\", \"invalid_message\");\n }\n };\n\n const removeTransport = options.transport.subscribe((message, metadata) => onMessage(message, metadata));\n const removeTransportError = options.transport.subscribeError?.((error, metadata) => {\n metadata?.ledger?.closeUndelivered();\n if (error instanceof WebLoomError && error.code === \"protocol_mismatch\") failClose(\"Remote Runtime protocol mismatch\", \"protocol_mismatch\");\n else if (error instanceof WebLoomError && error.code === \"transfer_invalid\") failClose(\"Invalid received transfer metadata\", \"transfer_invalid\");\n else failClose(\"Invalid WebLoom runtime message\", \"invalid_message\");\n });\n\n function applySnapshot(snapshot: RuntimeSnapshot): SnapshotApplyResult {\n if (disposed) return { accepted: false, reason: \"disposed\" };\n if (!snapshot || typeof snapshot !== \"object\") return { accepted: false, reason: \"invalid-snapshot\" };\n if (snapshot.protocolVersion !== RUNTIME_PROTOCOL_VERSION) return { accepted: false, reason: \"protocol-mismatch\" };\n try {\n if (snapshot.units.length > limits.maxSnapshotUnits || snapshot.services.length > limits.maxSnapshotServices) return { accepted: false, reason: \"invalid-snapshot\" };\n codec.encode({ ...snapshot, type: RUNTIME_SNAPSHOT_TYPE });\n validateDto(snapshot, { limits: { maxDepth: limits.maxDtoDepth, maxNodes: limits.maxDtoNodes, maxEdges: limits.maxDtoEdges, maxBudgetBytes: limits.maxMessageBudgetBytes }, phase: \"receive\" });\n } catch { return { accepted: false, reason: \"invalid-snapshot\" }; }\n if (options.remoteRuntimeId !== undefined && snapshot.runtimeId !== options.remoteRuntimeId) return { accepted: false, reason: \"invalid-snapshot\" };\n if (options.remoteRuntimeKind !== undefined && snapshot.runtimeKind !== options.remoteRuntimeKind) return { accepted: false, reason: \"invalid-snapshot\" };\n if (remoteRuntimeId !== undefined && snapshot.runtimeId !== remoteRuntimeId) return { accepted: false, reason: \"invalid-snapshot\" };\n if (remoteRuntimeKind !== undefined && snapshot.runtimeKind !== remoteRuntimeKind) return { accepted: false, reason: \"invalid-snapshot\" };\n let fingerprint: string;\n try { fingerprint = JSON.stringify(snapshot); } catch { return { accepted: false, reason: \"invalid-snapshot\" }; }\n if (remoteRuntimeInstanceId !== undefined && remoteRuntimeInstanceId === snapshot.runtimeInstanceId && snapshot.revision <= revision) {\n // A transport may have more than one internal observer. Replaying the\n // exact same revision is harmless and lets an observer report the state;\n // a different payload at that revision remains rejected.\n if (snapshot.revision === revision && fingerprint === appliedSnapshotFingerprint) return { accepted: true, state: currentState === \"disposed\" ? \"stale\" : currentState, revision };\n return { accepted: false, reason: \"stale-revision\", receivedRevision: snapshot.revision };\n }\n const services: ServiceReference[] = [];\n const keys = new Set<string>();\n try {\n for (const service of snapshot.state === \"ready\" ? snapshot.services : []) {\n const key = serviceKey(service);\n if (keys.has(key)) return { accepted: false, reason: \"invalid-snapshot\" };\n keys.add(key);\n services.push(Object.freeze({ kind: service.kind, capabilityId: service.capabilityId, contractVersion: service.contractVersion, runtime: snapshot.runtimeKind, runtimeInstanceId: snapshot.runtimeInstanceId, serviceInstanceId: service.serviceInstanceId, attributes: cloneFrozenAttributes(service.attributes), ...(service.grantId !== undefined ? { grantId: service.grantId } : {}), ...(service.authorizationRevision !== undefined ? { authorizationRevision: service.authorizationRevision } : {}) }));\n }\n } catch { return { accepted: false, reason: \"invalid-snapshot\" }; }\n const newRuntime = remoteRuntimeInstanceId !== undefined && remoteRuntimeInstanceId !== snapshot.runtimeInstanceId;\n // Adding a service while a proxy is waiting is not an exposure replacement.\n // Only an existing contract whose serviceInstanceId changes is a fence event;\n // otherwise the first ready snapshot would revoke a proxy created just before\n // the asynchronous directory arrived.\n const replaced = !newRuntime && remoteRuntimeInstanceId === snapshot.runtimeInstanceId\n && currentServices.some((current) => {\n const next = services.find((service) => serviceKey(service) === serviceKey(current));\n return next !== undefined && next.serviceInstanceId !== current.serviceInstanceId;\n });\n if (newRuntime || replaced) invalidate(newRuntime ? \"Remote Runtime instance changed\" : \"Remote Runtime service exposure replaced\");\n if (!newRuntime && !replaced) {\n for (const proxy of proxies.values()) {\n if (proxy.bound && !services.some((service) => serviceKey(service) === serviceKey(proxy.bound as ServiceReference) && service.serviceInstanceId === proxy.bound?.serviceInstanceId)) {\n revokeProxy(proxy, \"Remote Runtime service exposure was removed\");\n }\n }\n }\n remoteRuntimeId = snapshot.runtimeId;\n remoteRuntimeKind = snapshot.runtimeKind;\n remoteRuntimeInstanceId = snapshot.runtimeInstanceId;\n revision = snapshot.revision;\n appliedSnapshotFingerprint = fingerprint;\n currentServices = Object.freeze(services);\n currentState = snapshot.state === \"ready\" ? \"ready\" : snapshot.state === \"starting\" ? \"empty\" : snapshot.state === \"disposed\" ? \"disposed\" : \"stale\";\n if (currentState !== \"ready\" && snapshot.state !== \"starting\") for (const proxy of proxies.values()) revokeProxy(proxy, `Remote Runtime is ${snapshot.state}`);\n emit();\n return { accepted: true, state: currentState === \"disposed\" ? \"stale\" : currentState, revision };\n }\n\n const bridge: CapabilityBridge & { readonly pendingCallCount: number; readonly activeStreamCount: number; readonly retainedPayloadBytes: number } = {\n get state() { return currentState; },\n get runtimeInstanceId() { return remoteRuntimeInstanceId; },\n get runtimeKind() { return remoteRuntimeKind; },\n getClient<C extends RemoteCapability>(capability: C, scope?: LifecycleScope): CapabilityClient<C> {\n const key = `${capability.kind}\\u0000${capability.id}\\u0000${capability.version}\\u0000${scope?.identity.scopeId ?? \"root\"}`;\n let proxy = proxies.get(key);\n if (!proxy || proxy.revoked) {\n proxy = { capability, scope, cacheKey: key, revoked: false, reason: \"Capability proxy is revoked\" };\n proxies.set(key, proxy);\n scope?.onRevoke((reason) => revokeProxy(proxy as ProxyRecord, reason));\n }\n const cached = clients.get(key);\n if (cached && !proxy.revoked) return cached as CapabilityClient<C>;\n const client = capability.kind === \"rpc\"\n ? { call: (request: unknown, optionsForCall?: RpcCallOptions) => call(proxy as ProxyRecord, request, optionsForCall ?? {}) }\n : { subscribe: (request: unknown, optionsForSubscribe: StreamSubscribeOptions<unknown>) => subscribe(proxy as ProxyRecord, request, optionsForSubscribe) };\n clients.set(key, client as unknown as CapabilityClient<RemoteCapability>);\n return client as unknown as CapabilityClient<C>;\n },\n applySnapshot,\n invalidate,\n disconnect(reason = \"Runtime disconnected\") { invalidate(reason); currentState = \"stale\"; },\n dispose(reason = \"Runtime bridge disposed\") { if (disposed) return; disposed = true; invalidate(reason); removeTransport(); removeTransportError?.(); options.transport.close?.(); currentState = \"disposed\"; emit(); },\n subscribe(listener) { listeners.add(listener); return () => listeners.delete(listener); },\n services() { return currentServices; },\n get pendingCallCount() { return pendingCount; },\n get activeStreamCount() { return [...streams.values()].filter((entry) => entry.state === \"opening\" || entry.state === \"active\").length; },\n get retainedPayloadBytes() { return budget.retainedPayloadBytes; },\n };\n return bridge;\n}\n\n/** 内部 typed transfer 校验 helper;不接受 call 级临时 transfer 数组。 */\nexport function validateTransferables(value: unknown, transfer: readonly Transferable[] | undefined, limits?: RuntimeLimitsInput): readonly Transferable[] {\n return validateTransferList(value, transfer, { limits: limits ?? DEFAULT_RUNTIME_LIMITS, phase: \"validate\" });\n}\n","// MessagePort 到 v4 RuntimeTransport 的唯一适配。\n\nimport type { RuntimeReceiveMetadata, RuntimeTransport } from \"./serviceBridge.js\";\nimport type { RuntimeWireMessage } from \"../runtime/runtimeProtocol.js\";\nimport { createReceivePortLedger, normalizeRuntimeLimits, type RuntimeLimitsInput } from \"./dto.js\";\nimport { WebLoomError } from \"../contracts/lifecycle.js\";\nimport { createRuntimeMessageCodec } from \"../runtime/runtimeProtocol.js\";\n\nexport interface MessagePortLike {\n addEventListener(type: \"message\" | \"messageerror\", listener: (event: MessageEvent) => void): void;\n removeEventListener(type: \"message\" | \"messageerror\", listener: (event: MessageEvent) => void): void;\n postMessage(message: unknown, transfer?: readonly Transferable[]): void;\n start?(): void;\n close?(): void;\n}\n\n/** 将一个真实 MessagePort 绑定为双向 v4 transport。 */\nexport function createMessagePortRuntimeTransport(port: MessagePortLike, options: { readonly limits?: RuntimeLimitsInput } = {}): RuntimeTransport {\n const listeners = new Set<(message: RuntimeWireMessage, metadata?: RuntimeReceiveMetadata) => void>();\n const errorListeners = new Set<(error: unknown, metadata?: RuntimeReceiveMetadata) => void>();\n const codec = createRuntimeMessageCodec();\n const limits = normalizeRuntimeLimits(options.limits);\n const onMessage = (event: MessageEvent): void => {\n const ledger = createReceivePortLedger(event.ports ?? [], { limits, phase: \"receive\" });\n const metadata: RuntimeReceiveMetadata = Object.freeze({\n ports: ledger.ports,\n ledger,\n decoded: true,\n });\n if (!ledger.valid) {\n const error = new WebLoomError(\"transfer_invalid\", \"Invalid received transfer metadata\", \"receive\");\n for (const listener of [...errorListeners]) {\n try { listener(error, metadata); } catch { /* observer isolation */ }\n }\n return;\n }\n let message: RuntimeWireMessage;\n try { message = codec.decode(event.data); }\n catch (error) {\n ledger.closeUndelivered();\n for (const listener of [...errorListeners]) {\n try { listener(error, metadata); } catch { /* observer isolation */ }\n }\n return;\n }\n for (const listener of [...listeners]) {\n try { listener(message, metadata); } catch { /* observer isolation */ }\n }\n };\n port.addEventListener(\"message\", onMessage);\n port.start?.();\n let closed = false;\n return {\n send(message, transfer) {\n if (closed) throw new Error(\"MessagePort transport is closed\");\n port.postMessage(message, transfer);\n },\n subscribe(listener) { listeners.add(listener); return () => listeners.delete(listener); },\n subscribeError(listener) { errorListeners.add(listener); return () => errorListeners.delete(listener); },\n close() { if (closed) return; closed = true; port.removeEventListener(\"message\", onMessage); port.close?.(); listeners.clear(); errorListeners.clear(); },\n };\n}\n","// v4 MessagePort provider:同一物理端口上的反向 call/stream 分派。\n\nimport type { CapabilityPeer, HandlerCallContext, ServiceReference } from \"../contracts/capability.js\";\nimport { WebLoomError, type LifecycleScope } from \"../contracts/lifecycle.js\";\nimport {\n assertReceivedPortSet,\n createReceivePortLedger,\n createRuntimeBudget,\n normalizeRuntimeLimits,\n validateDto,\n validateRawDto,\n validateTransferList,\n type ReceivePortLedger,\n type RuntimeBudget,\n type RuntimeLimitsInput,\n} from \"./dto.js\";\nimport {\n RUNTIME_CALL_TYPE,\n RUNTIME_CANCEL_TYPE,\n RUNTIME_CREDIT_TYPE,\n RUNTIME_ERROR_MESSAGE_TYPE,\n RUNTIME_NEXT_TYPE,\n RUNTIME_PROTOCOL_VERSION,\n RUNTIME_RESULT_TYPE,\n createRuntimeMessageCodec,\n type RuntimeCallMessage,\n type RuntimeWireMessage,\n} from \"../runtime/runtimeProtocol.js\";\nimport { createMessagePortRuntimeTransport, type MessagePortLike } from \"./messagePortServiceTransport.js\";\nimport type { RuntimeTransport } from \"./serviceBridge.js\";\n\nexport interface MessagePortServiceCallInput {\n /** 已验证的 call message;request 已由生产 parser 规范化。 */\n readonly message: RuntimeCallMessage;\n /** parser 规范化后的请求。 */\n readonly request: unknown;\n /** 服务绑定身份。 */\n readonly reference: ServiceReference;\n /** 取消信号。 */\n readonly signal: AbortSignal;\n /** 本端以接收时钟计算的调用截止时间。 */\n readonly deadlineAt: number;\n /** 对端 peer 视图。 */\n readonly peer?: CapabilityPeer;\n}\n\nexport interface PreparedRequest {\n /** parser 规范化后的 DTO。 */\n readonly value: unknown;\n /** 契约声明的 transfer。 */\n readonly transfer?: readonly Transferable[];\n /** 可选的已计算计费值。 */\n readonly budgetBytes?: number;\n}\n\nexport interface MessagePortServiceProviderOptions {\n /** 兼容 standalone/testing 的当前 MessagePort;实际 Runtime 使用 shared transport。 */\n readonly port?: MessagePortLike;\n /** 当前物理 endpoint 的唯一 v4 transport。 */\n readonly transport?: RuntimeTransport;\n /** 当前可暴露的服务;返回空集合即拒绝新的调用。 */\n readonly services: () => readonly ServiceReference[];\n /** 调用 Host handler。 */\n readonly handleCall: (input: MessagePortServiceCallInput) => unknown | Promise<unknown | AsyncIterable<unknown>>;\n /** 当前 peer scope。 */\n readonly peerScope?: LifecycleScope;\n /** 默认 peer view;peerForCall 可按 handler 依赖进一步收窄。 */\n readonly peer?: CapabilityPeer;\n /** 当前 handler 所属插件允许观察的 peer view。 */\n readonly peerForCall?: (call: RuntimeCallMessage, reference: ServiceReference) => CapabilityPeer | undefined;\n /** 接收 request 的 parser/transfer 适配。 */\n readonly prepareRequest?: (call: RuntimeCallMessage, ledger: ReceivePortLedger) => PreparedRequest;\n /** 发送前验证/提取 unary response。 */\n readonly prepareResult?: (value: unknown, call: RuntimeCallMessage) => PreparedRequest;\n /** 发送前验证/提取 stream item。 */\n readonly prepareItem?: (value: unknown, call: RuntimeCallMessage) => PreparedRequest;\n /** 可信 Runtime/advanced 装配预算。 */\n readonly limits?: RuntimeLimitsInput;\n /** 可选的 Runtime 方向共享计数器。 */\n readonly budget?: RuntimeBudget;\n}\n\ninterface ActiveCall {\n readonly call: RuntimeCallMessage;\n readonly controller: AbortController;\n readonly reference: ServiceReference;\n readonly requestBytes: number;\n readonly deadlineAt: number;\n deadlineTimer?: ReturnType<typeof setTimeout>;\n removePeerRevoke?: () => void;\n pending: boolean;\n /** reserve() 为 stream 预留的活动槽;在 pending/stream 终态只释放一次。 */\n streamReserved: boolean;\n cancelled: boolean;\n /** 本端已经结束等待/交付,但业务执行仍可能未结束。 */\n frameworkSettled: boolean;\n executionReleased: boolean;\n}\n\ninterface StreamEntry {\n readonly active: ActiveCall;\n readonly call: RuntimeCallMessage;\n readonly controller: AbortController;\n readonly reference: ServiceReference;\n readonly window: number;\n iterator?: AsyncIterator<unknown>;\n credit: number;\n sequence: number;\n running: boolean;\n closed: boolean;\n iteratorDone: boolean;\n returnStarted: boolean;\n returnDone: boolean;\n pumpDone: boolean;\n}\n\nfunction safeErrorCode(error: unknown, fallback: string): string {\n return error instanceof WebLoomError ? error.code : fallback;\n}\n\nfunction post(transport: RuntimeTransport, codec: ReturnType<typeof createRuntimeMessageCodec>, message: RuntimeWireMessage, transfer: readonly Transferable[] = []): boolean {\n try { transport.send(codec.encode(message), transfer); return true; } catch { return false; }\n}\n\nfunction safeErrorMessage(code: string): string {\n const messages: Record<string, string> = {\n capability_unavailable: \"Capability is unavailable\",\n permission_denied: \"Capability authorization denied\",\n service_stale: \"Runtime service exposure is stale\",\n request_validation_failed: \"Capability request failed validation\",\n response_validation_failed: \"Capability response failed validation\",\n request_clone_failed: \"Capability request could not be delivered\",\n response_clone_failed: \"Capability response could not be delivered\",\n transfer_invalid: \"Capability transfer declaration is invalid\",\n handler_failed: \"Remote capability operation failed\",\n call_timeout: \"Capability call timed out\",\n request_cancelled: \"Capability call was cancelled\",\n service_revoked: \"Capability exposure was revoked\",\n transport_unavailable: \"Runtime transport is unavailable\",\n stream_overflow: \"Stream credit or sequence is invalid\",\n resource_limit_exceeded: \"Runtime resource limit exceeded\",\n invalid_message: \"Invalid WebLoom runtime message\",\n };\n return messages[code] ?? \"Remote capability operation failed\";\n}\n\n/** 创建一个严格 bounded 的 MessagePort provider。 */\nexport function createMessagePortServiceProvider(options: MessagePortServiceProviderOptions): {\n setServices(): void;\n dispose(): void;\n pendingCount(): number;\n executionCount(): number;\n nonCooperativeExecutionCount(): number;\n retainedPayloadBytes(): number;\n} {\n const codec = createRuntimeMessageCodec();\n const limits = normalizeRuntimeLimits(options.limits);\n const budget = options.budget ?? createRuntimeBudget(limits);\n const configuredTransport = options.transport ?? (options.port ? createMessagePortRuntimeTransport(options.port, { limits }) : undefined);\n if (!configuredTransport) throw new TypeError(\"MessagePort service provider requires transport or port\");\n const transport: RuntimeTransport = configuredTransport;\n const activeCalls = new Map<string, ActiveCall>();\n const streams = new Map<string, StreamEntry>();\n const executionSlots = new Map<string, ActiveCall>();\n let peerRetainedPayloadBytes = 0;\n let disposed = false;\n\n const serviceFor = (message: RuntimeCallMessage): ServiceReference | undefined => options.services().find((service) => (\n service.kind === (message.mode === \"stream\" ? \"stream\" : \"rpc\")\n && service.capabilityId === message.capabilityId\n && service.contractVersion === message.contractVersion\n && service.serviceInstanceId === message.serviceInstanceId\n ));\n\n const serviceErrorCode = (message: RuntimeCallMessage): \"capability_unavailable\" | \"service_stale\" => {\n // services() is the peer's visible projection. An absent contract must\n // not reveal whether a hidden provider exists; a wrong exposure identity\n // for a currently visible contract is the only stale case we can safely\n // identify at this boundary.\n const visibleContract = options.services().some((service) => (\n service.kind === (message.mode === \"stream\" ? \"stream\" : \"rpc\")\n && service.capabilityId === message.capabilityId\n && service.contractVersion === message.contractVersion\n ));\n return visibleContract ? \"service_stale\" : \"capability_unavailable\";\n };\n\n const sendError = (call: RuntimeCallMessage, code: string, phase: \"validate\" | \"wait\" | \"dispatch\" | \"execute\" | \"receive\" | \"dispose\"): void => {\n post(transport, codec, {\n type: RUNTIME_ERROR_MESSAGE_TYPE,\n protocolVersion: RUNTIME_PROTOCOL_VERSION,\n callId: call.callId,\n serviceInstanceId: call.serviceInstanceId,\n error: { code, message: safeErrorMessage(code), phase },\n });\n };\n\n const releaseExecution = (active: ActiveCall): void => {\n if (active.executionReleased) return;\n active.executionReleased = true;\n if (executionSlots.get(active.call.callId) === active) executionSlots.delete(active.call.callId);\n budget.releaseExecutionSlot();\n peerRetainedPayloadBytes = Math.max(0, peerRetainedPayloadBytes - active.requestBytes);\n budget.retainedPayloadBytes = Math.max(0, budget.retainedPayloadBytes - active.requestBytes);\n active.removePeerRevoke?.();\n active.removePeerRevoke = undefined;\n };\n\n const releaseStreamReservation = (active: ActiveCall): void => {\n if (!active.streamReserved) return;\n active.streamReserved = false;\n budget.activeStreams = Math.max(0, budget.activeStreams - 1);\n };\n\n const releasePending = (active: ActiveCall): void => {\n if (!active.pending) return;\n active.pending = false;\n if (activeCalls.get(active.call.callId) === active) activeCalls.delete(active.call.callId);\n if (active.deadlineTimer !== undefined) { clearTimeout(active.deadlineTimer); active.deadlineTimer = undefined; }\n budget.pendingCalls = Math.max(0, budget.pendingCalls - 1);\n };\n\n const finishPending = (active: ActiveCall): void => {\n releasePending(active);\n };\n\n const maybeReleaseStreamExecution = (stream: StreamEntry): void => {\n if (stream.pumpDone && stream.returnDone) releaseExecution(stream.active);\n };\n\n const returnIterator = (stream: StreamEntry): void => {\n if (stream.returnStarted) return;\n stream.returnStarted = true;\n const candidate = stream.iterator?.return;\n if (!candidate) { stream.returnDone = true; maybeReleaseStreamExecution(stream); return; }\n let result: unknown;\n try { result = candidate.call(stream.iterator); }\n catch { stream.returnDone = true; maybeReleaseStreamExecution(stream); return; }\n void Promise.resolve(result).then(() => {\n stream.returnDone = true;\n maybeReleaseStreamExecution(stream);\n }, () => {\n stream.returnDone = true;\n maybeReleaseStreamExecution(stream);\n });\n };\n\n const closeStream = (stream: StreamEntry, normalDone = false): void => {\n if (stream.closed) return;\n stream.closed = true;\n stream.active.cancelled = true;\n finishPending(stream.active);\n streams.delete(stream.call.callId);\n releaseStreamReservation(stream.active);\n if (normalDone) {\n stream.iteratorDone = true;\n stream.returnDone = true;\n maybeReleaseStreamExecution(stream);\n } else {\n // If the pump was never started (for example streamReady post failed),\n // there is no finally block that can mark it settled.\n if (!stream.running) stream.pumpDone = true;\n returnIterator(stream);\n maybeReleaseStreamExecution(stream);\n }\n };\n\n const closeLateIterable = async (value: unknown): Promise<void> => {\n try {\n if (!value || typeof (value as AsyncIterable<unknown>)[Symbol.asyncIterator] !== \"function\") return;\n const iterator = (value as AsyncIterable<unknown>)[Symbol.asyncIterator]();\n const close = iterator.return;\n if (close) await Promise.resolve(close.call(iterator));\n } catch {\n // A late iterator is already outside the consumer boundary; its cleanup\n // failure must not create an unhandled rejection or leak wire details.\n }\n };\n\n const cancelActive = (active: ActiveCall, errorCode = \"request_cancelled\"): void => {\n if (active.cancelled) return;\n active.frameworkSettled = true;\n active.cancelled = true;\n try { active.controller.abort(); } catch { /* noop */ }\n const stream = streams.get(active.call.callId);\n if (stream) closeStream(stream);\n else finishPending(active);\n void errorCode;\n };\n\n const reserve = (requestBytes: number, stream: boolean): WebLoomError | undefined => {\n if (activeCalls.size >= limits.maxPendingCallsPerPeer || budget.pendingCalls >= limits.maxPendingCallsPerRuntime) return new WebLoomError(\"resource_limit_exceeded\", safeErrorMessage(\"resource_limit_exceeded\"), \"dispatch\");\n if (executionSlots.size >= limits.maxExecutionSlotsPerPeer || budget.executionSlots >= limits.maxExecutionSlotsPerRuntime) return new WebLoomError(\"resource_limit_exceeded\", safeErrorMessage(\"resource_limit_exceeded\"), \"dispatch\");\n if (stream && (streams.size >= limits.maxActiveStreamsPerPeer || budget.activeStreams >= limits.maxActiveStreamsPerRuntime)) return new WebLoomError(\"resource_limit_exceeded\", safeErrorMessage(\"resource_limit_exceeded\"), \"dispatch\");\n if (requestBytes > limits.maxMessageBudgetBytes\n || peerRetainedPayloadBytes > limits.maxRetainedPayloadBytesPerPeer - requestBytes\n || budget.retainedPayloadBytes > limits.maxRetainedPayloadBytesPerRuntime - requestBytes) return new WebLoomError(\"resource_limit_exceeded\", safeErrorMessage(\"resource_limit_exceeded\"), \"dispatch\");\n budget.pendingCalls += 1;\n if (stream) budget.activeStreams += 1;\n budget.executionSlots += 1;\n peerRetainedPayloadBytes += requestBytes;\n budget.retainedPayloadBytes += requestBytes;\n return undefined;\n };\n\n const prepareRequest = (call: RuntimeCallMessage, ledger: ReceivePortLedger): { value: unknown; budgetBytes: number } => {\n try { validateRawDto(call.request, limits, \"receive\"); } catch (error) { ledger.closeUndelivered(); throw error; }\n let prepared: PreparedRequest;\n try { prepared = options.prepareRequest?.(call, ledger) ?? { value: call.request }; }\n catch (error) { ledger.closeUndelivered(); throw error; }\n let transfer: readonly Transferable[];\n try { transfer = validateTransferList(prepared.value, prepared.transfer, { limits, phase: \"receive\" }); }\n catch (error) { ledger.closeUndelivered(); throw error; }\n try { assertReceivedPortSet(ledger, transfer, { limits, phase: \"receive\" }); }\n catch (error) { ledger.closeUndelivered(); throw error; }\n const stats = validateDto(prepared.value, { limits: { maxDepth: limits.maxDtoDepth, maxNodes: limits.maxDtoNodes, maxEdges: limits.maxDtoEdges, maxBudgetBytes: limits.maxMessageBudgetBytes }, transferables: new Set(transfer), phase: \"receive\" });\n // Quota ownership always uses the production walker result. An adapter's\n // optional precomputed field must not be able to under-report a normalized\n // payload and bypass retained-byte limits.\n return { value: prepared.value, budgetBytes: stats.budgetBytes };\n };\n\n const prepareOutput = (prepared: PreparedRequest, ledger?: ReceivePortLedger): { value: unknown; transfer: readonly Transferable[] } => {\n try {\n const transfer = validateTransferList(prepared.value, prepared.transfer, { limits, phase: \"receive\" });\n if (ledger) assertReceivedPortSet(ledger, transfer, { limits, phase: \"receive\" });\n validateDto(prepared.value, { limits: { maxDepth: limits.maxDtoDepth, maxNodes: limits.maxDtoNodes, maxEdges: limits.maxDtoEdges, maxBudgetBytes: limits.maxMessageBudgetBytes }, transferables: new Set(transfer), phase: \"receive\" });\n return { value: prepared.value, transfer };\n } catch (error) { ledger?.closeUndelivered(); throw error; }\n };\n\n const pump = async (entry: StreamEntry): Promise<void> => {\n if (entry.running || entry.closed || !entry.iterator) return;\n entry.running = true;\n try {\n while (!entry.closed && !entry.active.cancelled && entry.credit > 0) {\n let next: IteratorResult<unknown>;\n try { next = await entry.iterator.next(); }\n catch (error) {\n if (!entry.closed && !entry.active.cancelled) sendError(entry.call, safeErrorCode(error, \"handler_failed\"), \"execute\");\n closeStream(entry);\n break;\n }\n if (entry.closed || entry.active.cancelled) break;\n if (next.done) {\n entry.iteratorDone = true;\n if (post(transport, codec, { type: RUNTIME_RESULT_TYPE, protocolVersion: RUNTIME_PROTOCOL_VERSION, callId: entry.call.callId, serviceInstanceId: entry.reference.serviceInstanceId, done: true })) closeStream(entry, true);\n else { sendError(entry.call, \"transport_unavailable\", \"receive\"); closeStream(entry, true); }\n break;\n }\n try {\n const prepared = options.prepareItem?.(next.value, entry.call) ?? { value: next.value };\n const output = prepareOutput(prepared);\n if (!post(transport, codec, { type: RUNTIME_NEXT_TYPE, protocolVersion: RUNTIME_PROTOCOL_VERSION, callId: entry.call.callId, serviceInstanceId: entry.reference.serviceInstanceId, sequence: entry.sequence, item: output.value }, output.transfer)) {\n sendError(entry.call, \"response_clone_failed\", \"receive\");\n closeStream(entry);\n break;\n }\n entry.credit -= 1;\n entry.sequence += 1;\n } catch (error) {\n if (!entry.closed && !entry.active.cancelled) sendError(entry.call, safeErrorCode(error, \"response_validation_failed\"), \"receive\");\n closeStream(entry);\n break;\n }\n }\n } finally {\n entry.running = false;\n entry.pumpDone = true;\n maybeReleaseStreamExecution(entry);\n }\n };\n\n const onMessage = (message: RuntimeWireMessage, metadata?: import(\"./serviceBridge.js\").RuntimeReceiveMetadata): void => {\n const ledger = metadata?.ledger ?? createReceivePortLedger(metadata?.ports, { limits, phase: \"receive\" });\n if (!ledger.valid) { failClose(); return; }\n\n if (message.type === RUNTIME_CANCEL_TYPE) {\n ledger.closeUndelivered();\n const active = activeCalls.get(message.callId) ?? streams.get(message.callId)?.active;\n if (!active || active.reference.serviceInstanceId !== message.serviceInstanceId) return;\n cancelActive(active);\n return;\n }\n\n if (message.type === RUNTIME_CREDIT_TYPE) {\n ledger.closeUndelivered();\n const stream = streams.get(message.callId);\n const valid = stream !== undefined\n && stream.reference.serviceInstanceId === message.serviceInstanceId\n && Number.isSafeInteger(message.count)\n && message.count >= 1\n && message.count <= limits.maxStreamCredit\n && stream.credit + message.count <= stream.window;\n if (!valid) {\n if (stream && !stream.active.cancelled) sendError(stream.call, \"stream_overflow\", \"receive\");\n if (stream) closeStream(stream);\n return;\n }\n stream.credit += message.count;\n void pump(stream);\n return;\n }\n\n // The physical port is bidirectional: result/next/snapshot messages are\n // consumed by the bridge listener on this same port. They are not an\n // invalid provider message and their business ports must remain available\n // to that listener.\n if (message.type !== RUNTIME_CALL_TYPE) return;\n const reference = serviceFor(message);\n if (!reference) { ledger.closeUndelivered(); sendError(message, serviceErrorCode(message), \"dispatch\"); return; }\n if (activeCalls.has(message.callId) || executionSlots.has(message.callId)) { ledger.closeUndelivered(); sendError(message, \"invalid_message\", \"dispatch\"); return; }\n if (message.grantId !== undefined && message.grantId !== reference.grantId) { ledger.closeUndelivered(); sendError(message, \"permission_denied\", \"dispatch\"); return; }\n const initialCredit = message.initialCredit;\n if (message.mode === \"stream\" && (!Number.isSafeInteger(initialCredit) || (initialCredit as number) < 1 || (initialCredit as number) > limits.maxStreamCredit)) {\n ledger.closeUndelivered();\n sendError(message, \"stream_overflow\", \"validate\");\n return;\n }\n let request: { value: unknown; budgetBytes: number };\n try { request = prepareRequest(message, ledger); }\n catch (error) { sendError(message, safeErrorCode(error, \"request_validation_failed\"), error instanceof WebLoomError ? error.phase : \"receive\"); return; }\n const quotaError = reserve(request.budgetBytes, message.mode === \"stream\");\n if (quotaError) { ledger.closeUndelivered(); sendError(message, quotaError.code, \"dispatch\"); return; }\n // Request ports are now part of the handler DTO. The handler owns them only\n // after this point; provider no longer closes them on later cancellation.\n ledger.handoff();\n const controller = new AbortController();\n const active: ActiveCall = { call: { ...message, request: request.value }, controller, reference, requestBytes: request.budgetBytes, deadlineAt: Date.now() + message.timeoutMs, pending: true, streamReserved: message.mode === \"stream\", cancelled: false, frameworkSettled: false, executionReleased: false };\n activeCalls.set(message.callId, active);\n executionSlots.set(message.callId, active);\n if (options.peerScope) active.removePeerRevoke = options.peerScope.onRevoke(() => cancelActive(active, \"service_revoked\"));\n active.deadlineTimer = setTimeout(() => cancelActive(active, \"call_timeout\"), message.timeoutMs);\n const callPeer = options.peerForCall?.(active.call, reference) ?? options.peer;\n\n void (async () => {\n let stream: StreamEntry | undefined;\n try {\n if (active.cancelled || disposed) { releaseExecution(active); return; }\n const result = await options.handleCall({ message: active.call, request: request.value, reference, signal: controller.signal, deadlineAt: active.deadlineAt, peer: callPeer });\n if (active.cancelled || disposed || executionSlots.get(message.callId) !== active) {\n if (message.mode === \"stream\") await closeLateIterable(result);\n releaseExecution(active);\n return;\n }\n if (message.mode === \"unary\") {\n try {\n const output = prepareOutput(options.prepareResult?.(result, active.call) ?? { value: result });\n if (!active.cancelled && !post(transport, codec, { type: RUNTIME_RESULT_TYPE, protocolVersion: RUNTIME_PROTOCOL_VERSION, callId: message.callId, serviceInstanceId: reference.serviceInstanceId, result: output.value }, output.transfer)) sendError(message, \"response_clone_failed\", \"receive\");\n } catch (error) { if (!active.cancelled) sendError(message, safeErrorCode(error, \"response_validation_failed\"), \"receive\"); }\n finishPending(active);\n releaseExecution(active);\n return;\n }\n if (!result || typeof (result as AsyncIterable<unknown>)[Symbol.asyncIterator] !== \"function\") throw new WebLoomError(\"handler_failed\", \"Stream handler did not return AsyncIterable\", \"execute\");\n const iterator = (result as AsyncIterable<unknown>)[Symbol.asyncIterator]();\n // An acquired iterator remains an execution slot while it is idle on\n // zero credit. It is released only after natural exhaustion or a\n // completed iterator.return().\n stream = { active, call: active.call, controller, reference, window: message.initialCredit ?? 16, iterator, credit: message.initialCredit ?? 16, sequence: 1, running: false, closed: false, iteratorDone: false, returnStarted: false, returnDone: false, pumpDone: false };\n streams.set(message.callId, stream);\n if (!post(transport, codec, { type: RUNTIME_RESULT_TYPE, protocolVersion: RUNTIME_PROTOCOL_VERSION, callId: message.callId, serviceInstanceId: reference.serviceInstanceId, streamReady: true })) {\n sendError(message, \"transport_unavailable\", \"dispatch\");\n closeStream(stream);\n return;\n }\n releasePending(active);\n void pump(stream);\n } catch (error) {\n if (!active.cancelled && !disposed) sendError(message, safeErrorCode(error, \"handler_failed\"), error instanceof WebLoomError ? error.phase : \"execute\");\n if (stream) closeStream(stream);\n else { finishPending(active); releaseExecution(active); }\n }\n })().catch(() => {\n const lateStream = streams.get(active.call.callId);\n if (lateStream) closeStream(lateStream);\n else { finishPending(active); releaseExecution(active); }\n });\n };\n\n function dispose(): void {\n if (disposed) return;\n disposed = true;\n for (const active of [...activeCalls.values()]) cancelActive(active, \"service_revoked\");\n for (const stream of [...streams.values()]) closeStream(stream);\n removeTransport();\n }\n\n function failClose(): void {\n dispose();\n try { transport.close?.(); } catch { /* best effort */ }\n }\n\n const removeTransport = transport.subscribe(onMessage);\n return {\n setServices() { /* provider reads the current projection at dispatch time */ },\n dispose,\n pendingCount() { return activeCalls.size; },\n executionCount() { return executionSlots.size; },\n nonCooperativeExecutionCount() { return [...executionSlots.values()].filter((active) => active.frameworkSettled).length; },\n retainedPayloadBytes() { return budget.retainedPayloadBytes; },\n };\n}\n","import { capabilityKey, type CapabilityDescriptor, type CapabilityPeer, type CapabilityClient, type RemoteCapability, type CapabilityBridge, type PeerScopeView } from \"../contracts/capability.js\";\nimport type { LifecycleScope } from \"../contracts/lifecycle.js\";\nimport { WebLoomError } from \"../contracts/lifecycle.js\";\n\n/** 将可信 peer controller 收窄为真正独立的普通 handler 作用域视图。 */\nexport function createPeerScopeView(scope: LifecycleScope): PeerScopeView {\n return Object.freeze({\n get state() { return scope.state; },\n signal: scope.signal,\n onRevoke(listener: (reason: string) => void) { return scope.onRevoke(listener); },\n });\n}\n\n/** 只复制 peer view 的公开字段,避免通过类型断言泄露 controller。 */\nexport function freezePeerView(peer: CapabilityPeer): CapabilityPeer {\n return Object.freeze(peer);\n}\n\nexport interface CreatePeerViewOptions {\n /** 当前物理连接的 opaque peer id。 */\n readonly peerId: string;\n /** 独立的只读 scope facade。 */\n readonly scope: PeerScopeView;\n /** 当前连接 bridge;其目录身份由 bridge 管理。 */\n readonly bridge: CapabilityBridge;\n /** handler 所属插件声明的 peer capability allowlist;undefined 仅供可信装配使用。 */\n readonly allowed?: readonly CapabilityDescriptor[];\n /** 代理绑定的完整 peer scope。 */\n readonly capabilityScope?: LifecycleScope;\n}\n\n/** 创建真正独立的 PeerView;不把 PeerController 通过类型断言传给普通 handler。 */\nexport function createCapabilityPeerView(options: CreatePeerViewOptions): CapabilityPeer {\n const allowed = options.allowed === undefined\n ? undefined\n : new Set(options.allowed.map((descriptor) => capabilityKey(descriptor)));\n return Object.freeze({\n peerId: options.peerId,\n get runtime() { return options.bridge.runtimeKind; },\n get runtimeInstanceId() { return options.bridge.runtimeInstanceId; },\n scope: options.scope,\n capability<C extends RemoteCapability>(capability: C): CapabilityClient<C> {\n if (allowed && !allowed.has(capabilityKey(capability))) {\n throw new WebLoomError(\"capability_unavailable\", \"Capability is unavailable\", \"dispatch\", { capabilityId: capability.id });\n }\n return options.bridge.getClient(capability, options.capabilityScope) as CapabilityClient<C>;\n },\n });\n}\n","// Window → SharedWorker 的 v4 双向连接。\n\nimport type { CapabilityBridge, CapabilityClient, CapabilityPeer, RemoteCapability, ServiceReference } from \"../contracts/capability.js\";\nimport { capabilityKey } from \"../contracts/capability.js\";\nimport type { LifecycleDisposeResult, RuntimeSnapshot } from \"../contracts/lifecycle.js\";\nimport { WebLoomError } from \"../contracts/lifecycle.js\";\nimport { createCapabilityPeerView, createPeerScopeView } from \"./peerView.js\";\nimport { cloneFrozenAttributes, createRuntimeBudget, normalizeRuntimeLimits, type RuntimeBudget, type RuntimeLimitsInput } from \"../transport/dto.js\";\nimport type { WindowApp, RuntimeHandle, RuntimeStatusListener, RuntimeStatusSnapshot } from \"./runtimeTypes.js\";\nimport { RuntimeUnavailableError } from \"./runtimeTypes.js\";\nimport { createCapabilityBridge } from \"../transport/serviceBridge.js\";\nimport { createMessagePortRuntimeTransport, type MessagePortLike } from \"../transport/messagePortServiceTransport.js\";\nimport { createMessagePortServiceProvider } from \"../transport/messagePortServiceProvider.js\";\nimport { invokeCapabilityHandler } from \"../host/capabilityRegistry.js\";\nimport { hostForWindowApp } from \"./windowRuntime.js\";\nimport { RUNTIME_ERROR_TYPE, RUNTIME_PROTOCOL_VERSION, RUNTIME_SNAPSHOT_TYPE } from \"./runtimeProtocol.js\";\n\nexport interface SharedWorkerLike {\n /** SharedWorker 主端口。 */\n readonly port: MessagePort;\n /** Worker error callback。 */\n onerror?: (event: Event) => void;\n addEventListener?(type: \"error\", listener: (event: Event) => void): void;\n removeEventListener?(type: \"error\", listener: (event: Event) => void): void;\n}\n\nexport type SharedWorkerFactory = (url: string | URL, options: { type: \"module\"; name?: string; credentials?: RequestCredentials }) => SharedWorkerLike;\n\nexport interface SharedWorkerClientExposure {\n /** 已完成本地初始化的 WindowApp。 */\n readonly app: WindowApp;\n /** 明确暴露给 Worker 的 RPC/stream capability。 */\n readonly expose?: readonly RemoteCapability[];\n}\n\nexport interface ConnectSharedWorkerOptions {\n /** Worker Runtime 逻辑标识。 */\n readonly id: string;\n /** Worker 构建 URL。 */\n readonly url: string | URL;\n /** SharedWorker name。 */\n readonly name?: string;\n /** 请求 credentials。 */\n readonly credentials?: RequestCredentials;\n /** 默认 call 预算。 */\n readonly defaultCallTimeoutMs?: number;\n /** 可信 transport 配额;只能使用默认值或收紧。 */\n readonly limits?: RuntimeLimitsInput;\n /** 可选的页面反向能力。 */\n readonly client?: SharedWorkerClientExposure;\n}\n\ninterface InternalOptions extends ConnectSharedWorkerOptions { readonly workerFactory?: SharedWorkerFactory; }\nconst handleBridges = new WeakMap<object, CapabilityBridge>();\n\nfunction makeWorker(options: InternalOptions): SharedWorkerLike {\n const workerOptions = { type: \"module\" as const, ...(options.name !== undefined ? { name: options.name } : {}), ...(options.credentials !== undefined ? { credentials: options.credentials } : {}) };\n if (options.workerFactory) return options.workerFactory(options.url, workerOptions);\n const WorkerConstructor = (globalThis as unknown as { SharedWorker?: new (url: string | URL, options: typeof workerOptions) => SharedWorkerLike }).SharedWorker;\n if (!WorkerConstructor) throw new RuntimeUnavailableError(\"SharedWorker is not supported by this browser\");\n return new WorkerConstructor(options.url, workerOptions);\n}\n\nfunction message(error: unknown): string { return error instanceof Error ? error.message : String(error); }\n\nfunction snapshotForClient(app: WindowApp, runtimeId: string, runtimeInstanceId: string, exposed: readonly RemoteCapability[], revision: number): RuntimeSnapshot & { readonly type: typeof RUNTIME_SNAPSHOT_TYPE } {\n const allowed = new Set(exposed.map((capability) => capabilityKey(capability)));\n const state = app.state();\n const runtimeState: RuntimeSnapshot[\"state\"] = state.state === \"disconnected\" ? \"failed\" : state.state;\n return {\n type: RUNTIME_SNAPSHOT_TYPE,\n protocolVersion: RUNTIME_PROTOCOL_VERSION,\n runtimeId,\n runtimeKind: \"window-main\",\n runtimeInstanceId,\n revision,\n state: runtimeState,\n units: state.units,\n services: runtimeState === \"ready\" ? state.services.filter((service) => allowed.has(capabilityKey({ kind: service.kind, id: service.capabilityId, version: service.contractVersion }))).map((service) => ({ kind: service.kind, capabilityId: service.capabilityId, contractVersion: service.contractVersion, serviceInstanceId: service.serviceInstanceId, attributes: cloneFrozenAttributes(service.attributes), ...(service.grantId !== undefined ? { grantId: service.grantId } : {}), ...(service.authorizationRevision !== undefined ? { authorizationRevision: service.authorizationRevision } : {}) })) : [],\n };\n}\n\nfunction connectInternal(options: InternalOptions): RuntimeHandle {\n if (!options || typeof options.id !== \"string\" || options.id.trim() === \"\") throw new TypeError(\"SharedWorker runtime id must be a non-empty string\");\n const requestedClientHost = options.client ? hostForWindowApp(options.client.app) : undefined;\n const exposed = options.client?.expose ?? [];\n for (const capability of exposed) {\n if ((capability as { readonly kind?: string }).kind !== \"rpc\" && (capability as { readonly kind?: string }).kind !== \"stream\") throw new TypeError(`Capability \"${(capability as { readonly id?: string }).id ?? \"unknown\"}\" is not remotely exposable`);\n if (!requestedClientHost?.capabilities.registration(capability)) throw new TypeError(`Capability \"${capability.id}\" is not registered by the WindowApp`);\n }\n const worker = makeWorker(options);\n const port = worker.port;\n if (!port) throw new RuntimeUnavailableError(\"SharedWorker did not expose a MessagePort\");\n const limits = normalizeRuntimeLimits(options.limits);\n const transport = createMessagePortRuntimeTransport({\n addEventListener(type, listener) { port.addEventListener(type, listener); },\n removeEventListener(type, listener) { port.removeEventListener(type, listener); },\n postMessage(messageValue, transfer) { (port as unknown as MessagePortLike).postMessage(messageValue, transfer ? [...transfer] : undefined); },\n start() { port.start(); },\n close() { try { port.close(); } catch { /* noop */ } },\n }, { limits });\n const outboundBudget: RuntimeBudget = createRuntimeBudget(limits);\n const inboundBudget: RuntimeBudget = createRuntimeBudget(limits);\n const bridge = createCapabilityBridge({ transport, remoteRuntimeKind: \"shared-worker\", remoteRuntimeId: options.id, defaultCallTimeoutMs: options.defaultCallTimeoutMs, limits, budget: outboundBudget });\n const listeners = new Set<RuntimeStatusListener>();\n const workerInstanceId = { value: \"\" };\n const localRuntimeInstanceId = options.client?.app.runtimeInstanceId ?? `window:${Date.now().toString(36)}`;\n let revision = 0;\n let disposed = false;\n let current: RuntimeStatusSnapshot = Object.freeze({ protocolVersion: RUNTIME_PROTOCOL_VERSION, runtimeId: options.id, runtimeKind: \"shared-worker\", runtimeInstanceId: \"\", state: \"starting\", revision: 0, units: [], services: [] });\n const clientHost = requestedClientHost;\n const clientPeerScope = options.client && clientHost\n ? clientHost.rootScope.child(\"peer\", { attributes: { peerId: `peer:${Date.now().toString(36)}:${Math.random().toString(36).slice(2)}` } })\n : undefined;\n const clientPeerScopeView = clientPeerScope ? createPeerScopeView(clientPeerScope) : undefined;\n const clientPeer: CapabilityPeer | undefined = clientPeerScope && clientPeerScopeView ? createCapabilityPeerView({\n peerId: clientPeerScope.identity.attributes.peerId as string,\n scope: clientPeerScopeView,\n bridge,\n capabilityScope: clientPeerScope,\n }) : undefined;\n const provider = options.client && clientHost ? createMessagePortServiceProvider({\n transport,\n peerScope: clientPeerScope,\n peer: clientPeer,\n budget: inboundBudget,\n limits,\n services: () => clientHost.serviceReferences().filter((service) => exposed.some((capability) => capabilityKey(capability) === capabilityKey({ kind: service.kind, id: service.capabilityId, version: service.contractVersion }))),\n peerForCall: (_call, reference) => {\n const registration = clientHost.capabilities.registration({ kind: reference.kind, id: reference.capabilityId, version: reference.contractVersion });\n return clientPeerScope && clientPeerScopeView ? createCapabilityPeerView({\n peerId: clientPeerScope.identity.attributes.peerId as string,\n scope: clientPeerScopeView,\n bridge,\n allowed: registration?.peerDependencies ?? [],\n capabilityScope: clientPeerScope,\n }) : undefined;\n },\n prepareRequest: (call) => {\n const registration = clientHost.capabilities.registration({ kind: call.mode === \"stream\" ? \"stream\" : \"rpc\", id: call.capabilityId, version: call.contractVersion });\n if (!registration || registration.capability.kind !== (call.mode === \"stream\" ? \"stream\" : \"rpc\")) throw new WebLoomError(\"service_stale\", \"Window service exposure is stale\", \"dispatch\");\n const capability = registration.capability as typeof registration.capability & { request: { parse(value: unknown): unknown }; transfer?: { request?: (value: unknown) => readonly Transferable[] } };\n let value: unknown;\n try { value = capability.request.parse(call.request); } catch { throw new WebLoomError(\"request_validation_failed\", \"Capability request failed validation\", \"receive\"); }\n return { value, transfer: capability.transfer?.request?.(value) };\n },\n handleCall: async ({ request, reference, signal, deadlineAt, peer }) => {\n const registration = clientHost.capabilities.registration({ kind: reference.kind, id: reference.capabilityId, version: reference.contractVersion });\n if (!registration) throw new WebLoomError(\"service_stale\", \"Window exposure is no longer available\", \"dispatch\");\n const handler = registration.handler as ((value: unknown, context: import(\"../contracts/capability.js\").HandlerCallContext) => unknown | Promise<unknown>) | undefined;\n if (!handler) throw new WebLoomError(\"service_stale\", \"Window service handler is unavailable\", \"dispatch\");\n return handler(request, { signal, deadlineAt, reference, origin: \"remote\", peer });\n },\n prepareResult: (value, call) => {\n const registration = clientHost.capabilities.registration({ kind: \"rpc\", id: call.capabilityId, version: call.contractVersion });\n if (!registration || registration.capability.kind !== \"rpc\") throw new Error(\"Window RPC registration disappeared\");\n const rpc = registration.capability as typeof registration.capability & { response: { parse(value: unknown): unknown }; transfer?: { response?: (value: unknown) => readonly Transferable[] } };\n const parsed = rpc.response.parse(value);\n return { value: parsed, transfer: rpc.transfer?.response?.(parsed) };\n },\n prepareItem: (value, call) => {\n const registration = clientHost.capabilities.registration({ kind: \"stream\", id: call.capabilityId, version: call.contractVersion });\n if (!registration || registration.capability.kind !== \"stream\") throw new Error(\"Window stream registration disappeared\");\n const stream = registration.capability as typeof registration.capability & { item: { parse(value: unknown): unknown }; transfer?: { item?: (value: unknown) => readonly Transferable[] } };\n const parsed = stream.item.parse(value);\n return { value: parsed, transfer: stream.transfer?.item?.(parsed) };\n },\n }) : undefined;\n\n const emit = (next: RuntimeStatusSnapshot): void => { current = Object.freeze({ ...next, units: Object.freeze([...next.units]), services: Object.freeze([...next.services]) }); for (const listener of [...listeners]) { try { listener(current); } catch { /* observer isolation */ } } };\n const sendClientSnapshot = (): void => { if (!options.client || disposed) return; revision += 1; try { transport.send(snapshotForClient(options.client.app, `${options.client.app.runtimeId}`, localRuntimeInstanceId, exposed, revision)); } catch { /* bridge deadline handles disconnect */ } };\n const removeRaw = transport.subscribe((messageValue) => {\n if (messageValue.type === RUNTIME_SNAPSHOT_TYPE && messageValue.runtimeKind === \"shared-worker\") {\n const applied = bridge.applySnapshot(messageValue);\n if (applied.accepted) {\n workerInstanceId.value = messageValue.runtimeInstanceId;\n emit({ protocolVersion: RUNTIME_PROTOCOL_VERSION, runtimeId: messageValue.runtimeId, runtimeKind: messageValue.runtimeKind, runtimeInstanceId: messageValue.runtimeInstanceId, state: messageValue.state, revision: messageValue.revision, units: messageValue.units, services: messageValue.services });\n }\n } else if (messageValue.type === RUNTIME_ERROR_TYPE) {\n bridge.invalidate(messageValue.message);\n emit({ ...current, state: \"failed\", error: messageValue.message, units: [], services: [] });\n }\n });\n const onError = (): void => { if (!disposed) { clientPeerScope?.revoke(\"SharedWorker disconnected\"); provider?.dispose(); bridge.disconnect(\"SharedWorker disconnected\"); emit({ ...current, state: \"disconnected\", runtimeInstanceId: \"\", revision: 0, units: [], services: [], error: \"SharedWorker disconnected\" }); } };\n port.addEventListener(\"messageerror\", onError);\n if (worker.addEventListener) worker.addEventListener(\"error\", onError);\n else worker.onerror = onError;\n sendClientSnapshot();\n const removeClient = options.client?.app.subscribe(() => sendClientSnapshot());\n\n const handle: RuntimeHandle = {\n runtimeKind: \"shared-worker\", runtimeId: options.id,\n get runtimeInstanceId() { return workerInstanceId.value; },\n state: () => current,\n capability<C extends RemoteCapability>(capability: C): CapabilityClient<C> { return bridge.getClient(capability); },\n optionalCapability<C extends RemoteCapability>(capability: C): CapabilityClient<C> | undefined { return bridge.services().some((service) => service.kind === capability.kind && service.capabilityId === capability.id && service.contractVersion === capability.version) ? bridge.getClient(capability) : undefined; },\n inspect: () => Object.freeze({ ...current, pendingCallCount: bridge.pendingCallCount, activeStreamCount: bridge.activeStreamCount, peerCount: current.state === \"ready\" ? 1 : 0 }),\n subscribe(listener) { listeners.add(listener); listener(current); return () => listeners.delete(listener); },\n dispose(reason = \"SharedWorker connection disposed\"): Promise<void> { if (disposed) return Promise.resolve(); disposed = true; emit({ ...current, state: \"stopping\" }); removeClient?.(); removeRaw(); clientPeerScope?.revoke(reason); provider?.dispose(); bridge.dispose(reason); port.removeEventListener(\"messageerror\", onError); worker.removeEventListener?.(\"error\", onError); transport.close?.(); emit({ ...current, state: \"disposed\", runtimeInstanceId: \"\", revision: 0, units: [], services: [] }); return clientPeerScope ? clientPeerScope.dispose({ reason }).then(() => undefined) : Promise.resolve(); },\n };\n handleBridges.set(handle as object, bridge);\n return handle;\n}\n\n/** 同步创建 RuntimeHandle;ready 由 state/capability Promise 观察。 */\nexport function connectSharedWorker(options: ConnectSharedWorkerOptions): RuntimeHandle { return connectInternal(options); }\n\n/** testing 入口才允许注入可控 Worker 工厂。 */\nexport function connectSharedWorkerForTesting(options: ConnectSharedWorkerOptions, workerFactory: SharedWorkerFactory): RuntimeHandle { return connectInternal({ ...options, workerFactory }); }\n\n/** advanced 装配层取得连接 bridge;普通 RuntimeHandle 不暴露该实现细节。 */\nexport function bridgeForRuntimeHandle(handle: RuntimeHandle): CapabilityBridge {\n const bridge = handleBridges.get(handle as object);\n if (!bridge) throw new Error(\"RuntimeHandle is not owned by WebLoom\");\n return bridge;\n}\n"]}
1
+ {"version":3,"sources":["../src/transport/serviceBridge.ts","../src/transport/messagePortServiceTransport.ts","../src/transport/messagePortServiceProvider.ts","../src/runtime/peerView.ts","../src/runtime/connectSharedWorker.ts"],"names":["active"],"mappings":"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","file":"chunk-ANA6GBEI.js","sourcesContent":["// WebLoom v4 typed capability bridge。\n//\n// 这里是唯一的远端 call/stream pending 实现。它负责本端的 deadline、代理\n// 身份 fence、有限 DTO/transfer 校验以及 stream 的消费状态机;MessagePort\n// provider 负责另一侧的 handler 执行状态机。\n\nimport type {\n CapabilityBridge,\n CapabilityClient,\n RemoteCapability,\n RpcCapabilityBase,\n RpcCallOptions,\n ServiceReference,\n StreamCapabilityBase,\n StreamSubscribeOptions,\n StreamSubscription,\n} from \"../contracts/capability.js\";\nimport { WebLoomError, type LifecycleScope, type RuntimeKind, type RuntimeSnapshot, type SnapshotApplyResult } from \"../contracts/lifecycle.js\";\nimport {\n assertReceivedPortSet,\n cloneFrozenAttributes,\n createReceivePortLedger,\n createRuntimeBudget,\n DEFAULT_RUNTIME_LIMITS,\n normalizeRuntimeLimits,\n validateDto,\n validateRawDto,\n validateTransferList,\n validateTransferListWithStats,\n type ReceivePortLedger,\n type RuntimeBudget,\n type RuntimeLimitsInput,\n} from \"./dto.js\";\nimport {\n createRuntimeMessageCodec,\n RUNTIME_CALL_TYPE,\n RUNTIME_CANCEL_TYPE,\n RUNTIME_CREDIT_TYPE,\n RUNTIME_ERROR_MESSAGE_TYPE,\n RUNTIME_ERROR_TYPE,\n RUNTIME_NEXT_TYPE,\n RUNTIME_PROTOCOL_VERSION,\n RUNTIME_RESULT_TYPE,\n RUNTIME_SNAPSHOT_TYPE,\n type RuntimeErrorResponseMessage,\n type RuntimeWireMessage,\n} from \"../runtime/runtimeProtocol.js\";\n\nexport interface RuntimeReceiveMetadata {\n /** 本次 MessageEvent 实际携带的业务 MessagePort;仅 transport 本地使用。 */\n readonly ports?: readonly MessagePort[];\n /** 由物理 endpoint transport 创建的一次性接收资源账本。 */\n readonly ledger?: ReceivePortLedger;\n /** 物理 endpoint 已完成一次 codec decode。 */\n readonly decoded?: boolean;\n}\n\nexport interface RuntimeTransport {\n /** 发送已验证 v4 message;transfer 由契约 extractor 提供。 */\n send(message: RuntimeWireMessage, transfer?: readonly Transferable[]): void;\n /** 订阅接收 message 及本次事件的本地 transfer 元数据。 */\n subscribe(listener: (message: RuntimeWireMessage, metadata?: RuntimeReceiveMetadata) => void): () => void;\n /** 关闭本端传输。 */\n close?(): void;\n /** 物理 endpoint 对 decode/接收账本错误的统一通知。 */\n subscribeError?(listener: (error: unknown, metadata?: RuntimeReceiveMetadata) => void): () => void;\n}\n\nexport interface CreateCapabilityBridgeOptions {\n /** 底层双向 transport。 */\n readonly transport: RuntimeTransport;\n /** 预期的对端 Runtime 类型。 */\n readonly remoteRuntimeKind?: RuntimeKind;\n /** 预期的对端逻辑 Runtime id。 */\n readonly remoteRuntimeId?: string;\n /** 默认调用预算。 */\n readonly defaultCallTimeoutMs?: number;\n /** 可信 Runtime/advanced 装配提供的预算;只能收紧 v4 默认值。 */\n readonly limits?: RuntimeLimitsInput;\n /** 可选的 Runtime 方向共享计数器。 */\n readonly budget?: RuntimeBudget;\n}\n\ninterface ProxyRecord {\n readonly capability: RemoteCapability;\n readonly scope?: LifecycleScope;\n readonly cacheKey: string;\n bound?: ServiceReference;\n revoked: boolean;\n reason: string;\n}\n\ninterface QueueItem {\n readonly value: unknown;\n readonly ledger: ReceivePortLedger;\n readonly budgetBytes: number;\n}\n\ninterface QuotaReservation {\n readonly payloadBytes: number;\n pendingReserved: boolean;\n streamReserved: boolean;\n payloadReserved: boolean;\n}\n\ninterface WaitingCallRecord {\n readonly proxy: ProxyRecord;\n readonly prepared: { readonly value: unknown; readonly transfer: readonly Transferable[]; readonly budgetBytes: number };\n readonly reservation: QuotaReservation;\n readonly deadline: number;\n readonly mode: \"unary\" | \"stream\";\n fail: (error: unknown) => void;\n start: (reference: ServiceReference, remaining: number) => void;\n finished: boolean;\n timer?: ReturnType<typeof setTimeout>;\n removeListener?: () => void;\n}\n\ninterface CallbackExecutionRecord {\n readonly stream: PendingStream;\n readonly item: QueueItem;\n released: boolean;\n}\n\ninterface PendingBase {\n readonly callId: string;\n readonly capability: RemoteCapability;\n readonly reference: ServiceReference;\n readonly proxy: ProxyRecord;\n readonly controller: AbortController;\n readonly cleanup?: () => void;\n readonly reservation: QuotaReservation;\n readonly mode: \"unary\" | \"stream\";\n timer?: ReturnType<typeof setTimeout>;\n settled: boolean;\n cancelSent: boolean;\n}\n\ninterface PendingUnary extends PendingBase {\n readonly mode: \"unary\";\n resolve(value?: unknown): void;\n reject(error: unknown): void;\n}\n\ntype StreamState = \"opening\" | \"active\" | \"draining\" | \"closed\" | \"failed\";\n\ninterface PendingStream extends PendingBase {\n readonly mode: \"stream\";\n readonly onNext: (value: unknown) => void | Promise<void>;\n readonly itemParser: { parse(value: unknown): unknown };\n readonly window: number;\n readonly resolveReady: () => void;\n readonly rejectReady: (error: unknown) => void;\n readonly resolveClosed: () => void;\n readonly rejectClosed: (error: unknown) => void;\n credit: number;\n sequence: number;\n state: StreamState;\n doneReceived: boolean;\n processing: boolean;\n draining: boolean;\n readySettled: boolean;\n closedSettled: boolean;\n queue: QueueItem[];\n executionWaiterRemove?: () => void;\n}\n\ntype Pending = PendingUnary | PendingStream;\n\nfunction id(prefix: string): string {\n try {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") return `${prefix}:${crypto.randomUUID()}`;\n } catch { /* fallback */ }\n return `${prefix}:${Date.now().toString(36)}:${Math.random().toString(36).slice(2)}`;\n}\n\nfunction timeoutMs(value: number | undefined, fallback: number): number {\n const result = value ?? fallback;\n if (!Number.isFinite(result) || result < 1 || result > 300_000) throw new TypeError(\"timeoutMs must be a finite number from 1 to 300000\");\n return result;\n}\n\nfunction mergeSignals(...signals: readonly (AbortSignal | undefined)[]): { signal: AbortSignal; dispose(): void } {\n const controller = new AbortController();\n const active = signals.filter((signal): signal is AbortSignal => signal !== undefined);\n const listeners = active.map((signal) => {\n const listener = (): void => { try { controller.abort(signal.reason); } catch { controller.abort(); } };\n if (signal.aborted) listener(); else signal.addEventListener(\"abort\", listener, { once: true });\n return { signal, listener };\n });\n return { signal: controller.signal, dispose() { for (const item of listeners) item.signal.removeEventListener(\"abort\", item.listener); } };\n}\n\nfunction frameworkError(\n code: ConstructorParameters<typeof WebLoomError>[0],\n phase: ConstructorParameters<typeof WebLoomError>[2],\n context?: ConstructorParameters<typeof WebLoomError>[3],\n): WebLoomError {\n const text: Record<string, string> = {\n protocol_mismatch: \"Remote Runtime protocol is not supported\",\n capability_unavailable: \"Capability is unavailable\",\n request_validation_failed: \"Capability request failed validation\",\n response_validation_failed: \"Capability response failed validation\",\n request_clone_failed: \"Capability request could not be delivered\",\n response_clone_failed: \"Capability response could not be delivered\",\n transfer_invalid: \"Capability transfer declaration is invalid\",\n handler_failed: \"Remote capability operation failed\",\n call_timeout: \"Capability call timed out; remote side effect is unknown\",\n request_cancelled: \"Capability call was cancelled\",\n service_revoked: \"Capability exposure was revoked\",\n service_stale: \"Capability exposure is stale\",\n transport_unavailable: \"Runtime transport is unavailable\",\n stream_overflow: \"Stream credit or sequence is invalid\",\n resource_limit_exceeded: \"Runtime resource limit exceeded\",\n invalid_snapshot: \"Invalid Runtime snapshot\",\n invalid_message: \"Invalid WebLoom runtime message\",\n };\n return new WebLoomError(code, text[String(code)] ?? \"WebLoom operation failed\", phase, context);\n}\n\nfunction errorFromWire(message: RuntimeErrorResponseMessage): WebLoomError {\n return frameworkError(message.error.code, message.error.phase, { serviceInstanceId: message.serviceInstanceId });\n}\n\nfunction validCredit(value: number, maximum: number): boolean {\n return Number.isSafeInteger(value) && value >= 1 && value <= maximum;\n}\n\nfunction serviceMatches(reference: ServiceReference, capability: RemoteCapability): boolean {\n return reference.kind === capability.kind && reference.capabilityId === capability.id && reference.contractVersion === capability.version;\n}\n\nfunction serviceKey(service: Pick<ServiceReference, \"kind\" | \"capabilityId\" | \"contractVersion\">): string {\n return `${service.kind}\\u0000${service.capabilityId}\\u0000${service.contractVersion}`;\n}\n\nfunction contextFor(capability: RemoteCapability, reference?: ServiceReference): ConstructorParameters<typeof WebLoomError>[3] {\n return { capabilityId: capability.id, ...(reference ? { serviceInstanceId: reference.serviceInstanceId } : {}) };\n}\n\n/** 创建按 peer 绑定、可撤销且支持 typed stream 的 bridge。 */\nexport function createCapabilityBridge(options: CreateCapabilityBridgeOptions): CapabilityBridge & {\n readonly pendingCallCount: number;\n readonly activeStreamCount: number;\n readonly retainedPayloadBytes: number;\n} {\n const codec = createRuntimeMessageCodec();\n const limits = normalizeRuntimeLimits(options.limits);\n const budget = options.budget ?? createRuntimeBudget(limits);\n const listeners = new Set<() => void>();\n const pending = new Map<string, Pending>();\n const streams = new Map<string, PendingStream>();\n const waitingCalls = new Set<WaitingCallRecord>();\n const callbackExecutions = new Set<CallbackExecutionRecord>();\n const proxies = new Map<string, ProxyRecord>();\n const clients = new Map<string, CapabilityClient<RemoteCapability>>();\n let pendingCount = 0;\n let peerRetainedPayloadBytes = 0;\n let currentState: CapabilityBridge[\"state\"] = \"empty\";\n let terminalFailure: WebLoomError | undefined;\n let remoteRuntimeId: string | undefined;\n let remoteRuntimeKind: RuntimeKind | undefined;\n let remoteRuntimeInstanceId: string | undefined;\n let revision = -1;\n let appliedSnapshotFingerprint: string | undefined;\n let currentServices: readonly ServiceReference[] = [];\n let disposed = false;\n let reservedStreamCount = 0;\n const defaultTimeout = timeoutMs(options.defaultCallTimeoutMs, 30_000);\n\n const emit = (): void => {\n for (const listener of [...listeners]) { try { listener(); } catch { /* observer isolation */ } }\n };\n\n const reserve = (payloadBytes: number, stream: boolean): QuotaReservation | WebLoomError => {\n if (pendingCount >= limits.maxPendingCallsPerPeer || budget.pendingCalls >= limits.maxPendingCallsPerRuntime) return frameworkError(\"resource_limit_exceeded\", \"dispatch\");\n if (stream && (reservedStreamCount >= limits.maxActiveStreamsPerPeer || budget.activeStreams >= limits.maxActiveStreamsPerRuntime)) return frameworkError(\"resource_limit_exceeded\", \"dispatch\");\n if (payloadBytes > limits.maxMessageBudgetBytes\n || peerRetainedPayloadBytes > limits.maxRetainedPayloadBytesPerPeer - payloadBytes\n || budget.retainedPayloadBytes > limits.maxRetainedPayloadBytesPerRuntime - payloadBytes) return frameworkError(\"resource_limit_exceeded\", \"dispatch\");\n budget.pendingCalls += 1;\n if (stream) budget.activeStreams += 1;\n peerRetainedPayloadBytes += payloadBytes;\n budget.retainedPayloadBytes += payloadBytes;\n pendingCount += 1;\n if (stream) reservedStreamCount += 1;\n return { payloadBytes, pendingReserved: true, streamReserved: stream, payloadReserved: true };\n };\n\n const releasePendingReservation = (reservation: QuotaReservation): void => {\n if (!reservation.pendingReserved) return;\n reservation.pendingReserved = false;\n pendingCount = Math.max(0, pendingCount - 1);\n budget.pendingCalls = Math.max(0, budget.pendingCalls - 1);\n };\n\n const releaseStreamReservation = (reservation: QuotaReservation): void => {\n if (!reservation.streamReserved) return;\n reservation.streamReserved = false;\n reservedStreamCount = Math.max(0, reservedStreamCount - 1);\n budget.activeStreams = Math.max(0, budget.activeStreams - 1);\n };\n\n const releasePayloadReservation = (reservation: QuotaReservation): void => {\n if (!reservation.payloadReserved) return;\n reservation.payloadReserved = false;\n peerRetainedPayloadBytes = Math.max(0, peerRetainedPayloadBytes - reservation.payloadBytes);\n budget.retainedPayloadBytes = Math.max(0, budget.retainedPayloadBytes - reservation.payloadBytes);\n };\n\n const releaseReservation = (reservation: QuotaReservation): void => {\n releasePendingReservation(reservation);\n releaseStreamReservation(reservation);\n releasePayloadReservation(reservation);\n };\n\n const releaseCallbackExecution = (record: CallbackExecutionRecord): void => {\n if (record.released) return;\n record.released = true;\n callbackExecutions.delete(record);\n peerRetainedPayloadBytes = Math.max(0, peerRetainedPayloadBytes - record.item.budgetBytes);\n budget.retainedPayloadBytes = Math.max(0, budget.retainedPayloadBytes - record.item.budgetBytes);\n budget.releaseExecutionSlot();\n emit();\n };\n\n const releaseQueueItem = (item: QueueItem): void => {\n item.ledger.closeUndelivered();\n peerRetainedPayloadBytes = Math.max(0, peerRetainedPayloadBytes - item.budgetBytes);\n budget.retainedPayloadBytes = Math.max(0, budget.retainedPayloadBytes - item.budgetBytes);\n };\n\n const settleUnary = (entry: PendingUnary, error?: unknown, value?: unknown): void => {\n if (entry.settled) return;\n entry.settled = true;\n if (entry.timer !== undefined) clearTimeout(entry.timer);\n pending.delete(entry.callId);\n releaseReservation(entry.reservation);\n entry.cleanup?.();\n if (error !== undefined) entry.reject(error); else entry.resolve(value);\n emit();\n };\n\n const sendCancel = (entry: PendingBase): void => {\n if (entry.cancelSent) return;\n entry.cancelSent = true;\n try {\n options.transport.send({ type: RUNTIME_CANCEL_TYPE, protocolVersion: RUNTIME_PROTOCOL_VERSION, callId: entry.callId, serviceInstanceId: entry.reference.serviceInstanceId });\n } catch { /* connection is already unavailable */ }\n try { entry.controller.abort(); } catch { /* noop */ }\n };\n\n const settleReadyReject = (stream: PendingStream, error: unknown): void => {\n if (stream.readySettled) return;\n stream.readySettled = true;\n stream.rejectReady(error);\n };\n\n const settleClosedReject = (stream: PendingStream, error: unknown): void => {\n if (stream.closedSettled) return;\n stream.closedSettled = true;\n stream.rejectClosed(error);\n };\n\n const settleClosedResolve = (stream: PendingStream): void => {\n if (stream.closedSettled) return;\n stream.closedSettled = true;\n stream.resolveClosed();\n };\n\n const forgetStream = (stream: PendingStream): void => {\n if (!stream.closedSettled || stream.processing || stream.queue.length > 0) return;\n streams.delete(stream.callId);\n };\n\n const finishDraining = (stream: PendingStream): void => {\n if (!stream.doneReceived || stream.processing || stream.queue.length > 0 || stream.closedSettled) return;\n stream.state = \"closed\";\n settleClosedResolve(stream);\n forgetStream(stream);\n emit();\n };\n\n const terminateStream = (stream: PendingStream, error: WebLoomError, notifyRemote: boolean): void => {\n if (stream.state === \"closed\" || stream.state === \"failed\") return;\n stream.state = \"failed\";\n if (stream.timer !== undefined) clearTimeout(stream.timer);\n pending.delete(stream.callId);\n stream.executionWaiterRemove?.();\n stream.executionWaiterRemove = undefined;\n releaseReservation(stream.reservation);\n // Even when the remote cancel cannot be sent (for example after a\n // transport error), the local handler-facing signal must be fenced.\n try { stream.controller.abort(error); } catch { /* already aborted */ }\n for (const item of stream.queue.splice(0)) releaseQueueItem(item);\n if (!stream.readySettled) settleReadyReject(stream, error);\n settleClosedReject(stream, error);\n stream.cleanup?.();\n if (notifyRemote) sendCancel(stream);\n forgetStream(stream);\n emit();\n };\n\n const errorWithTerminalCause = (cause: WebLoomError, capability: RemoteCapability, reference?: ServiceReference): WebLoomError => (\n new WebLoomError(cause.code, cause.message, cause.phase, { ...cause.context, ...contextFor(capability, reference) }, cause.details)\n );\n\n const revokeProxy = (proxy: ProxyRecord, reason: string, terminalCause?: WebLoomError): void => {\n if (proxy.revoked) return;\n proxy.revoked = true;\n proxy.reason = reason;\n if (proxies.get(proxy.cacheKey) === proxy) clients.delete(proxy.cacheKey);\n const affected = new Set<Pending>();\n for (const entry of pending.values()) if (entry.proxy === proxy) affected.add(entry);\n for (const entry of streams.values()) if (entry.proxy === proxy) affected.add(entry);\n for (const entry of affected) {\n if (entry.proxy !== proxy) continue;\n const error = terminalCause\n ? errorWithTerminalCause(terminalCause, entry.capability, entry.reference)\n : frameworkError(\"service_revoked\", \"dispose\", contextFor(entry.capability, entry.reference));\n if (entry.mode === \"stream\") terminateStream(entry as PendingStream, error, true);\n else {\n settleUnary(entry as PendingUnary, error);\n sendCancel(entry);\n }\n }\n for (const record of [...waitingCalls]) {\n if (record.proxy === proxy) record.fail(terminalCause\n ? errorWithTerminalCause(terminalCause, record.proxy.capability, record.proxy.bound)\n : frameworkError(\"service_revoked\", \"dispose\", contextFor(record.proxy.capability, record.proxy.bound)));\n }\n };\n\n const findService = (capability: RemoteCapability): ServiceReference | undefined => currentServices.find((service) => serviceMatches(service, capability));\n\n const terminalError = (proxy: ProxyRecord, capability: RemoteCapability): WebLoomError | undefined => {\n if (terminalFailure && !disposed) return frameworkError(terminalFailure.code, terminalFailure.phase, contextFor(capability, proxy.bound));\n if (disposed || proxy.revoked) return frameworkError(\"service_revoked\", \"dispatch\", contextFor(capability, proxy.bound));\n if (currentState === \"stale\" || currentState === \"disposed\") return frameworkError(\"service_revoked\", \"dispatch\", contextFor(capability, proxy.bound));\n if (proxy.bound && !currentServices.some((service) => serviceKey(service) === serviceKey(proxy.bound as ServiceReference) && service.serviceInstanceId === proxy.bound?.serviceInstanceId)) {\n return frameworkError(\"service_stale\", \"dispatch\", contextFor(capability, proxy.bound));\n }\n // Before the first ready snapshot a lazy proxy must remain waitable. Once\n // the peer has published a ready projection, however, an unbound\n // capability absent from that projection is not a timeout oracle: callers\n // must observe the same redacted unavailable result as a peer allowlist\n // denial. A proxy bound to a previously visible exposure still gets the\n // more specific stale result above.\n if (currentState === \"ready\" && !proxy.bound && !findService(capability)) {\n return frameworkError(\"capability_unavailable\", \"wait\", contextFor(capability));\n }\n return undefined;\n };\n\n const prepareRequest = (capability: RemoteCapability, request: unknown): { value: unknown; transfer: readonly Transferable[]; budgetBytes: number } => {\n validateRawDto(request, limits, \"validate\");\n const parser = capability as RemoteCapability & { request: { parse(value: unknown): unknown } };\n let parsed: unknown;\n try { parsed = parser.request.parse(request); } catch { throw frameworkError(\"request_validation_failed\", \"validate\", contextFor(capability)); }\n let validation: ReturnType<typeof validateTransferListWithStats>;\n try {\n const descriptor = (capability as RemoteCapability & { transfer?: { request?: (value: unknown) => readonly Transferable[] } }).transfer;\n validation = validateTransferListWithStats(parsed, descriptor?.request?.(parsed), { limits, phase: \"validate\" });\n } catch (error) {\n if (error instanceof WebLoomError) throw error;\n throw frameworkError(\"transfer_invalid\", \"validate\", contextFor(capability));\n }\n return { value: parsed, transfer: validation.transfer, budgetBytes: validation.stats.budgetBytes };\n };\n\n const prepareIncoming = (capability: RemoteCapability, value: unknown, direction: \"response\" | \"item\", ledger: ReceivePortLedger): { value: unknown; transfer: readonly Transferable[]; stats: ReturnType<typeof validateDto> } => {\n try { validateRawDto(value, limits, \"receive\"); } catch (error) { ledger.closeUndelivered(); throw error; }\n const parser = capability as RemoteCapability & { response?: { parse(value: unknown): unknown }; item?: { parse(value: unknown): unknown }; transfer?: { response?: (value: unknown) => readonly Transferable[]; item?: (value: unknown) => readonly Transferable[] } };\n let parsed: unknown;\n try {\n const selected = direction === \"response\" ? parser.response : parser.item;\n if (!selected) throw new Error(\"parser unavailable\");\n parsed = selected.parse(value);\n } catch { ledger.closeUndelivered(); throw frameworkError(\"response_validation_failed\", \"receive\", contextFor(capability)); }\n let validation: ReturnType<typeof validateTransferListWithStats>;\n try { validation = validateTransferListWithStats(parsed, parser.transfer?.[direction]?.(parsed), { limits, phase: \"receive\" }); }\n catch (error) { ledger.closeUndelivered(); throw error instanceof WebLoomError ? error : frameworkError(\"transfer_invalid\", \"receive\", contextFor(capability)); }\n try { assertReceivedPortSet(ledger, validation.transfer, { limits, phase: \"receive\" }); }\n catch (error) { ledger.closeUndelivered(); throw error; }\n return { value: parsed, transfer: validation.transfer, stats: validation.stats };\n };\n\n const sendWire = (message: RuntimeWireMessage, transfer: readonly Transferable[] = []): void => {\n const encoded = codec.encode(message);\n options.transport.send(encoded, transfer);\n };\n\n const startUnary = (proxy: ProxyRecord, prepared: { value: unknown; transfer: readonly Transferable[]; budgetBytes: number }, reference: ServiceReference, callOptions: RpcCallOptions, timeout: number, existingReservation?: QuotaReservation): Promise<unknown> => {\n const reservation = existingReservation ?? reserve(prepared.budgetBytes, false);\n if (reservation instanceof WebLoomError) return Promise.reject(reservation);\n const controller = new AbortController();\n const merged = mergeSignals(controller.signal, proxy.scope?.signal, callOptions.signal);\n const callId = id(\"call\");\n return new Promise<unknown>((resolve, reject) => {\n const entry: PendingUnary = { callId, capability: proxy.capability, reference, proxy, controller, cleanup: merged.dispose, reservation, timer: undefined, settled: false, cancelSent: false, mode: \"unary\", resolve, reject };\n pending.set(callId, entry);\n const onAbort = (): void => {\n if (entry.settled) return;\n settleUnary(entry, frameworkError(\"request_cancelled\", \"dispose\", contextFor(entry.capability, reference)));\n sendCancel(entry);\n };\n merged.signal.addEventListener(\"abort\", onAbort, { once: true });\n entry.timer = setTimeout(() => {\n if (entry.settled) return;\n settleUnary(entry, frameworkError(\"call_timeout\", \"receive\", contextFor(entry.capability, reference)));\n sendCancel(entry);\n }, timeout);\n if (merged.signal.aborted) { onAbort(); return; }\n try {\n sendWire({ type: RUNTIME_CALL_TYPE, protocolVersion: RUNTIME_PROTOCOL_VERSION, callId, capabilityId: entry.capability.id, contractVersion: entry.capability.version, serviceInstanceId: reference.serviceInstanceId, mode: \"unary\", timeoutMs: timeout, request: prepared.value, ...(callOptions.operationId !== undefined ? { operationId: callOptions.operationId } : {}) }, prepared.transfer);\n } catch {\n settleUnary(entry, frameworkError(\"request_clone_failed\", \"dispatch\", contextFor(entry.capability, reference)));\n }\n });\n };\n\n const waitForService = (proxy: ProxyRecord, prepared: { value: unknown; transfer: readonly Transferable[]; budgetBytes: number }, callOptions: RpcCallOptions): Promise<unknown> => {\n const timeout = timeoutMs(callOptions.timeoutMs, defaultTimeout);\n const deadline = Date.now() + timeout;\n const reserved = reserve(prepared.budgetBytes, false);\n if (reserved instanceof WebLoomError) return Promise.reject(reserved);\n return new Promise<unknown>((resolve, reject) => {\n const record: WaitingCallRecord = {\n proxy,\n prepared,\n reservation: reserved,\n deadline,\n mode: \"unary\",\n finished: false,\n fail: () => undefined,\n start: () => undefined,\n };\n const cleanup = (): void => { if (record.timer !== undefined) clearTimeout(record.timer); record.removeListener?.(); callOptions.signal?.removeEventListener(\"abort\", onAbort); waitingCalls.delete(record); };\n record.fail = (error: unknown): void => {\n if (record.finished) return;\n record.finished = true;\n cleanup();\n releaseReservation(record.reservation);\n reject(error);\n };\n record.start = (reference: ServiceReference, remaining: number): void => {\n if (record.finished) return;\n record.finished = true;\n cleanup();\n if (!proxy.bound) proxy.bound = reference;\n void startUnary(proxy, prepared, reference, callOptions, remaining, record.reservation).then(resolve, reject);\n };\n const check = (): void => {\n if (record.finished) return;\n const unavailable = terminalError(proxy, proxy.capability);\n if (unavailable) { record.fail(unavailable); return; }\n const reference = proxy.bound ?? findService(proxy.capability);\n if (!reference) return;\n const remaining = deadline - Date.now();\n if (remaining <= 0) { record.fail(frameworkError(\"call_timeout\", \"wait\", contextFor(proxy.capability))); return; }\n record.start(reference, remaining);\n };\n const onAbort = (): void => record.fail(frameworkError(\"request_cancelled\", \"dispose\", contextFor(proxy.capability)));\n record.timer = setTimeout(() => record.fail(frameworkError(\"call_timeout\", \"wait\", contextFor(proxy.capability))), timeout);\n if (callOptions.signal) {\n if (callOptions.signal.aborted) { onAbort(); return; }\n callOptions.signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n listeners.add(check);\n record.removeListener = () => listeners.delete(check);\n waitingCalls.add(record);\n check();\n });\n };\n\n const call = (proxy: ProxyRecord, request: unknown, callOptions: RpcCallOptions): Promise<unknown> => {\n const unavailable = terminalError(proxy, proxy.capability);\n if (unavailable) return Promise.reject(unavailable);\n const timeout = timeoutMs(callOptions.timeoutMs, defaultTimeout);\n let prepared: { value: unknown; transfer: readonly Transferable[]; budgetBytes: number };\n try { prepared = prepareRequest(proxy.capability, request); }\n catch (error) { return Promise.reject(error instanceof WebLoomError ? error : frameworkError(\"request_validation_failed\", \"validate\", contextFor(proxy.capability))); }\n const reference = proxy.bound ?? findService(proxy.capability);\n if (!reference) return waitForService(proxy, prepared, callOptions);\n if (!proxy.bound) proxy.bound = reference;\n return startUnary(proxy, prepared, reference, callOptions, timeout);\n };\n\n const createRejectedSubscription = (error: WebLoomError): StreamSubscription<unknown> => {\n let readyReject!: (reason: unknown) => void;\n let closedReject!: (reason: unknown) => void;\n const ready = new Promise<void>((_, reject) => { readyReject = reject; });\n const closed = new Promise<void>((_, reject) => { closedReject = reject; });\n void ready.catch(() => undefined);\n void closed.catch(() => undefined);\n readyReject(error);\n closedReject(error);\n return { ready, closed, cancel() { /* terminal */ } };\n };\n\n const startStream = (proxy: ProxyRecord, prepared: { value: unknown; transfer: readonly Transferable[]; budgetBytes: number }, reference: ServiceReference, optionsForSubscribe: StreamSubscribeOptions<unknown>, timeout: number, existingReservation?: QuotaReservation): StreamSubscription<unknown> => {\n const maximumCredit = Math.min(256, limits.maxStreamCredit);\n const window = optionsForSubscribe.initialCredit ?? 16;\n if (!validCredit(window, maximumCredit)) {\n if (existingReservation) releaseReservation(existingReservation);\n return createRejectedSubscription(frameworkError(\"stream_overflow\", \"validate\", contextFor(proxy.capability, reference)));\n }\n const reservation = existingReservation ?? reserve(prepared.budgetBytes, true);\n if (reservation instanceof WebLoomError) return createRejectedSubscription(reservation);\n let resolveReady!: () => void;\n let rejectReady!: (error: unknown) => void;\n let resolveClosed!: () => void;\n let rejectClosed!: (error: unknown) => void;\n const ready = new Promise<void>((resolve, reject) => { resolveReady = resolve; rejectReady = reject; });\n const closed = new Promise<void>((resolve, reject) => { resolveClosed = resolve; rejectClosed = reject; });\n void ready.catch(() => undefined);\n void closed.catch(() => undefined);\n const controller = new AbortController();\n const merged = mergeSignals(controller.signal, proxy.scope?.signal, optionsForSubscribe.signal);\n const callId = id(\"stream\");\n const entry: PendingStream = {\n callId, capability: proxy.capability, reference, proxy, controller, cleanup: merged.dispose, reservation, timer: undefined, settled: false, cancelSent: false,\n mode: \"stream\", onNext: optionsForSubscribe.onNext, itemParser: (proxy.capability as StreamCapabilityBase & { item: { parse(value: unknown): unknown } }).item,\n window, credit: window, sequence: 1, state: \"opening\", doneReceived: false, processing: false, draining: false, readySettled: false, closedSettled: false, queue: [],\n resolveReady, rejectReady, resolveClosed, rejectClosed,\n };\n streams.set(callId, entry);\n pending.set(callId, entry);\n const cancel = (): void => {\n if (entry.state === \"closed\" || entry.state === \"failed\") return;\n terminateStream(entry, frameworkError(\"request_cancelled\", \"dispose\", contextFor(entry.capability, reference)), true);\n };\n merged.signal.addEventListener(\"abort\", cancel, { once: true });\n entry.timer = setTimeout(() => {\n if (entry.state !== \"opening\") return;\n terminateStream(entry, frameworkError(\"call_timeout\", \"wait\", contextFor(entry.capability, reference)), true);\n }, timeout);\n if (merged.signal.aborted) { cancel(); return { ready, closed, cancel }; }\n try {\n sendWire({ type: RUNTIME_CALL_TYPE, protocolVersion: RUNTIME_PROTOCOL_VERSION, callId, capabilityId: entry.capability.id, contractVersion: entry.capability.version, serviceInstanceId: reference.serviceInstanceId, mode: \"stream\", timeoutMs: timeout, request: prepared.value, initialCredit: window, ...(optionsForSubscribe.operationId !== undefined ? { operationId: optionsForSubscribe.operationId } : {}) }, prepared.transfer);\n } catch {\n terminateStream(entry, frameworkError(\"request_clone_failed\", \"dispatch\", contextFor(entry.capability, reference)), false);\n }\n return { ready, closed, cancel };\n };\n\n const waitForStream = (proxy: ProxyRecord, prepared: { value: unknown; transfer: readonly Transferable[]; budgetBytes: number }, optionsForSubscribe: StreamSubscribeOptions<unknown>): StreamSubscription<unknown> => {\n const timeout = timeoutMs(optionsForSubscribe.timeoutMs, defaultTimeout);\n const deadline = Date.now() + timeout;\n const reserved = reserve(prepared.budgetBytes, true);\n if (reserved instanceof WebLoomError) return createRejectedSubscription(reserved);\n let resolveReady!: () => void;\n let rejectReady!: (error: unknown) => void;\n let resolveClosed!: () => void;\n let rejectClosed!: (error: unknown) => void;\n const ready = new Promise<void>((resolve, reject) => { resolveReady = resolve; rejectReady = reject; });\n const closed = new Promise<void>((resolve, reject) => { resolveClosed = resolve; rejectClosed = reject; });\n void ready.catch(() => undefined);\n void closed.catch(() => undefined);\n let active: StreamSubscription<unknown> | undefined;\n const record: WaitingCallRecord = {\n proxy,\n prepared,\n reservation: reserved,\n deadline,\n mode: \"stream\",\n finished: false,\n fail: () => undefined,\n start: () => undefined,\n };\n const cleanup = (): void => { if (record.timer !== undefined) clearTimeout(record.timer); record.removeListener?.(); optionsForSubscribe.signal?.removeEventListener(\"abort\", onAbort); waitingCalls.delete(record); };\n record.fail = (error: unknown): void => { if (record.finished) return; record.finished = true; cleanup(); releaseReservation(record.reservation); rejectReady(error); rejectClosed(error); };\n record.start = (reference: ServiceReference, remaining: number): void => {\n if (record.finished) return;\n record.finished = true;\n cleanup();\n if (!proxy.bound) proxy.bound = reference;\n active = startStream(proxy, prepared, reference, optionsForSubscribe, remaining, record.reservation);\n active.ready.then(resolveReady, rejectReady);\n active.closed.then(resolveClosed, rejectClosed);\n };\n const onAbort = (): void => record.fail(frameworkError(\"request_cancelled\", \"dispose\", contextFor(proxy.capability)));\n const check = (): void => {\n if (record.finished) return;\n const unavailable = terminalError(proxy, proxy.capability);\n if (unavailable) { record.fail(unavailable); return; }\n const reference = proxy.bound ?? findService(proxy.capability);\n if (!reference) return;\n const remaining = deadline - Date.now();\n if (remaining <= 0) { record.fail(frameworkError(\"call_timeout\", \"wait\", contextFor(proxy.capability))); return; }\n record.start(reference, remaining);\n };\n record.timer = setTimeout(() => record.fail(frameworkError(\"call_timeout\", \"wait\", contextFor(proxy.capability))), timeout);\n if (optionsForSubscribe.signal) {\n if (optionsForSubscribe.signal.aborted) { onAbort(); return { ready, closed, cancel() { /* terminal */ } }; }\n optionsForSubscribe.signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n listeners.add(check);\n record.removeListener = () => listeners.delete(check);\n waitingCalls.add(record);\n check();\n return { ready, closed, cancel(reason = \"stream cancelled\") { void reason; if (active) active.cancel(reason); else record.fail(frameworkError(\"request_cancelled\", \"dispose\", contextFor(proxy.capability))); } };\n };\n\n const subscribe = (proxy: ProxyRecord, request: unknown, optionsForSubscribe: StreamSubscribeOptions<unknown>): StreamSubscription<unknown> => {\n const unavailable = terminalError(proxy, proxy.capability);\n if (unavailable) return createRejectedSubscription(unavailable);\n if (typeof optionsForSubscribe.onNext !== \"function\") return createRejectedSubscription(frameworkError(\"request_validation_failed\", \"validate\", contextFor(proxy.capability)));\n let prepared: { value: unknown; transfer: readonly Transferable[]; budgetBytes: number };\n try { prepared = prepareRequest(proxy.capability, request); }\n catch (error) { return createRejectedSubscription(error instanceof WebLoomError ? error : frameworkError(\"request_validation_failed\", \"validate\", contextFor(proxy.capability))); }\n const reference = proxy.bound ?? findService(proxy.capability);\n if (!reference) return waitForStream(proxy, prepared, optionsForSubscribe);\n if (!proxy.bound) proxy.bound = reference;\n return startStream(proxy, prepared, reference, optionsForSubscribe, timeoutMs(optionsForSubscribe.timeoutMs, defaultTimeout));\n };\n\n let drainStream: (stream: PendingStream) => void;\n const waitForExecutionSlot = (stream: PendingStream): void => {\n if (stream.executionWaiterRemove || stream.state === \"failed\" || stream.state === \"closed\" || stream.queue.length === 0) return;\n stream.executionWaiterRemove = budget.registerExecutionWaiter(() => {\n stream.executionWaiterRemove = undefined;\n drainStream(stream);\n });\n };\n drainStream = (stream: PendingStream): void => {\n if (stream.draining) return;\n stream.draining = true;\n void (async () => {\n try {\n while (stream.queue.length > 0) {\n if (stream.state === \"failed\" || stream.state === \"closed\") break;\n const item = stream.queue.shift();\n if (!item) break;\n if (callbackExecutions.size >= limits.maxExecutionSlotsPerPeer || budget.executionSlots >= limits.maxExecutionSlotsPerRuntime) {\n stream.queue.unshift(item);\n waitForExecutionSlot(stream);\n break;\n }\n stream.executionWaiterRemove?.();\n stream.executionWaiterRemove = undefined;\n const execution: CallbackExecutionRecord = { stream, item, released: false };\n callbackExecutions.add(execution);\n budget.executionSlots += 1;\n stream.processing = true;\n try {\n // MessagePort resources become handler-owned immediately before\n // invoking user code. The byte reservation remains attached to the\n // execution record until that callback settles.\n item.ledger.handoff();\n await stream.onNext(item.value);\n if (stream.state === \"active\" && !stream.doneReceived) {\n stream.credit += 1;\n try { sendWire({ type: RUNTIME_CREDIT_TYPE, protocolVersion: RUNTIME_PROTOCOL_VERSION, callId: stream.callId, serviceInstanceId: stream.reference.serviceInstanceId, count: 1 }); }\n catch { terminateStream(stream, frameworkError(\"transport_unavailable\", \"dispatch\", contextFor(stream.capability, stream.reference)), true); break; }\n }\n } catch {\n terminateStream(stream, frameworkError(\"handler_failed\", \"execute\", contextFor(stream.capability, stream.reference)), true);\n break;\n } finally {\n stream.processing = false;\n releaseCallbackExecution(execution);\n }\n }\n } finally {\n stream.processing = false;\n stream.draining = false;\n if (stream.queue.length === 0 || stream.state === \"failed\" || stream.state === \"closed\") {\n stream.executionWaiterRemove?.();\n stream.executionWaiterRemove = undefined;\n } else {\n // The loop can stop with an item retained because the shared budget\n // is full. Keep that FIFO waiter registered after this drain task\n // yields; otherwise no later slot release would revisit this stream.\n waitForExecutionSlot(stream);\n }\n finishDraining(stream);\n forgetStream(stream);\n }\n })().catch(() => {\n terminateStream(stream, frameworkError(\"handler_failed\", \"execute\", contextFor(stream.capability, stream.reference)), true);\n });\n };\n\n const invalidate = (reason = \"remote service directory replaced\", terminalCause?: WebLoomError): void => {\n // A terminal protocol/transport failure is the cause observed by every\n // affected request. Settle it before revoking proxies, otherwise the proxy\n // fence would replace the useful protocol error with service_revoked.\n if (terminalCause) {\n for (const record of [...waitingCalls]) record.fail(errorWithTerminalCause(terminalCause, record.proxy.capability, record.proxy.bound));\n for (const entry of [...pending.values()]) {\n const error = errorWithTerminalCause(terminalCause, entry.capability, entry.reference);\n if (entry.mode === \"stream\") terminateStream(entry, error, true);\n else settleUnary(entry, error);\n }\n }\n for (const proxy of proxies.values()) revokeProxy(proxy, reason, terminalCause);\n if (!terminalCause) for (const record of [...waitingCalls]) record.fail(frameworkError(\"service_stale\", \"dispose\", contextFor(record.proxy.capability, record.proxy.bound)));\n clients.clear();\n if (!terminalCause) for (const entry of [...pending.values()]) {\n if (entry.mode === \"stream\") terminateStream(entry, frameworkError(\"service_stale\", \"dispose\", contextFor(entry.capability, entry.reference)), true);\n else settleUnary(entry, frameworkError(\"service_stale\", \"dispose\", contextFor(entry.capability, entry.reference)));\n }\n currentServices = [];\n currentState = disposed ? \"disposed\" : \"stale\";\n emit();\n };\n\n const failClose = (reason: string, code: \"protocol_mismatch\" | \"invalid_snapshot\" | \"invalid_message\" | \"transfer_invalid\" = \"invalid_message\"): void => {\n if (disposed) return;\n terminalFailure = frameworkError(code, \"receive\");\n invalidate(reason, terminalFailure);\n try { options.transport.close?.(); } catch { /* best effort */ }\n };\n\n const onMessage = (message: RuntimeWireMessage, metadata?: RuntimeReceiveMetadata): void => {\n const ledger = metadata?.ledger ?? createReceivePortLedger(metadata?.ports, { limits, phase: \"receive\" });\n if (!ledger.valid) {\n failClose(\"Invalid received transfer metadata\", \"transfer_invalid\");\n return;\n }\n try {\n if (!metadata?.decoded) {\n message = codec.decode(message);\n }\n } catch (error) {\n ledger.closeUndelivered();\n if (error instanceof WebLoomError && error.code === \"protocol_mismatch\") {\n failClose(\"Remote Runtime protocol mismatch\", \"protocol_mismatch\");\n } else if (error instanceof WebLoomError && error.code === \"invalid_snapshot\") {\n failClose(\"Invalid WebLoom runtime message\", \"invalid_snapshot\");\n } else failClose(\"Invalid WebLoom runtime message\", \"invalid_message\");\n return;\n }\n try {\n // A Runtime connection has one physical bidirectional port. Incoming\n // call/cancel/credit messages belong to the peer-side Provider listener;\n // this bridge must leave its event.ports ledger untouched so that the\n // Provider can validate and hand off business resources.\n if (message.type === RUNTIME_CALL_TYPE || message.type === RUNTIME_CANCEL_TYPE || message.type === RUNTIME_CREDIT_TYPE) return;\n if (message.type === RUNTIME_SNAPSHOT_TYPE) {\n if (ledger.ports.length > 0) throw frameworkError(\"transfer_invalid\", \"receive\");\n const result = applySnapshot(message);\n if (!result.accepted && result.reason === \"protocol-mismatch\") failClose(\"Remote Runtime protocol mismatch\", \"protocol_mismatch\");\n else if (!result.accepted && result.reason === \"invalid-snapshot\") failClose(\"Invalid Runtime snapshot\", \"invalid_snapshot\");\n return;\n }\n if (message.type === RUNTIME_ERROR_TYPE) { ledger.closeUndelivered(); invalidate(message.message); return; }\n if (message.type === RUNTIME_RESULT_TYPE) {\n const entry = pending.get(message.callId);\n if (!entry || entry.reference.serviceInstanceId !== message.serviceInstanceId) { ledger.closeUndelivered(); return; }\n if (entry.mode === \"unary\") {\n if (!(\"result\" in message)) { ledger.closeUndelivered(); settleUnary(entry, frameworkError(\"invalid_message\", \"receive\", contextFor(entry.capability, entry.reference))); return; }\n try {\n const incoming = prepareIncoming(entry.capability, message.result, \"response\", ledger);\n ledger.handoff();\n settleUnary(entry, undefined, incoming.value);\n } catch (error) { settleUnary(entry, error instanceof WebLoomError ? error : frameworkError(\"response_validation_failed\", \"receive\", contextFor(entry.capability, entry.reference))); }\n return;\n }\n const stream = entry as PendingStream;\n if (\"streamReady\" in message && message.streamReady) {\n if (stream.state !== \"opening\") { ledger.closeUndelivered(); terminateStream(stream, frameworkError(\"invalid_message\", \"receive\", contextFor(stream.capability, stream.reference)), true); return; }\n if (ledger.ports.length > 0) { ledger.closeUndelivered(); terminateStream(stream, frameworkError(\"transfer_invalid\", \"receive\", contextFor(stream.capability, stream.reference)), true); return; }\n stream.state = \"active\";\n stream.readySettled = true;\n if (stream.timer !== undefined) clearTimeout(stream.timer);\n releasePendingReservation(stream.reservation);\n stream.resolveReady();\n emit();\n return;\n }\n if (\"done\" in message && message.done) {\n if (stream.state !== \"active\" || stream.doneReceived) { ledger.closeUndelivered(); terminateStream(stream, frameworkError(\"invalid_message\", \"receive\", contextFor(stream.capability, stream.reference)), true); return; }\n if (ledger.ports.length > 0) { ledger.closeUndelivered(); terminateStream(stream, frameworkError(\"transfer_invalid\", \"receive\", contextFor(stream.capability, stream.reference)), true); return; }\n stream.doneReceived = true;\n stream.state = \"draining\";\n pending.delete(stream.callId);\n releaseStreamReservation(stream.reservation);\n releasePayloadReservation(stream.reservation);\n stream.cleanup?.();\n finishDraining(stream);\n drainStream(stream);\n emit();\n return;\n }\n ledger.closeUndelivered();\n terminateStream(stream, frameworkError(\"invalid_message\", \"receive\", contextFor(stream.capability, stream.reference)), true);\n return;\n }\n if (message.type === RUNTIME_ERROR_MESSAGE_TYPE) {\n const entry = pending.get(message.callId);\n if (!entry || entry.reference.serviceInstanceId !== message.serviceInstanceId) { ledger.closeUndelivered(); return; }\n ledger.closeUndelivered();\n const error = errorFromWire(message);\n if (entry.mode === \"stream\") terminateStream(entry as PendingStream, error, false);\n else settleUnary(entry, error);\n return;\n }\n if (message.type === RUNTIME_NEXT_TYPE) {\n const entry = pending.get(message.callId);\n if (!entry || entry.mode !== \"stream\" || entry.reference.serviceInstanceId !== message.serviceInstanceId) { ledger.closeUndelivered(); return; }\n const stream = entry as PendingStream;\n if (stream.state !== \"active\" || stream.doneReceived) { ledger.closeUndelivered(); terminateStream(stream, frameworkError(\"invalid_message\", \"receive\", contextFor(stream.capability, stream.reference)), true); return; }\n if (stream.credit < 1) { ledger.closeUndelivered(); terminateStream(stream, frameworkError(\"stream_overflow\", \"receive\", contextFor(stream.capability, stream.reference)), true); return; }\n if (message.sequence !== stream.sequence) { ledger.closeUndelivered(); terminateStream(stream, frameworkError(\"stream_overflow\", \"receive\", contextFor(stream.capability, stream.reference)), true); return; }\n let incoming: ReturnType<typeof prepareIncoming>;\n try { incoming = prepareIncoming(stream.capability, message.item, \"item\", ledger); }\n catch (error) { terminateStream(stream, error instanceof WebLoomError ? error : frameworkError(\"response_validation_failed\", \"receive\", contextFor(stream.capability, stream.reference)), true); return; }\n const { value, stats } = incoming;\n if (peerRetainedPayloadBytes > limits.maxRetainedPayloadBytesPerPeer - stats.budgetBytes\n || budget.retainedPayloadBytes > limits.maxRetainedPayloadBytesPerRuntime - stats.budgetBytes\n || stream.queue.length >= stream.window) { ledger.closeUndelivered(); terminateStream(stream, frameworkError(\"resource_limit_exceeded\", \"receive\", contextFor(stream.capability, stream.reference)), true); return; }\n stream.credit -= 1;\n stream.sequence += 1;\n stream.queue.push({ value, ledger, budgetBytes: stats.budgetBytes });\n peerRetainedPayloadBytes += stats.budgetBytes;\n budget.retainedPayloadBytes += stats.budgetBytes;\n drainStream(stream);\n return;\n }\n ledger.closeUndelivered();\n } catch (error) {\n ledger.closeUndelivered();\n if (error instanceof WebLoomError && error.code === \"protocol_mismatch\") failClose(\"Remote Runtime protocol mismatch\", \"protocol_mismatch\");\n else if (error instanceof WebLoomError && error.code === \"invalid_snapshot\") failClose(\"Invalid WebLoom runtime message\", \"invalid_snapshot\");\n else if (error instanceof WebLoomError && error.code === \"transfer_invalid\") failClose(\"Invalid WebLoom runtime message\", \"transfer_invalid\");\n else failClose(\"Invalid WebLoom runtime message\", \"invalid_message\");\n }\n };\n\n const removeTransport = options.transport.subscribe((message, metadata) => onMessage(message, metadata));\n const removeTransportError = options.transport.subscribeError?.((error, metadata) => {\n metadata?.ledger?.closeUndelivered();\n if (error instanceof WebLoomError && error.code === \"protocol_mismatch\") failClose(\"Remote Runtime protocol mismatch\", \"protocol_mismatch\");\n else if (error instanceof WebLoomError && error.code === \"transfer_invalid\") failClose(\"Invalid received transfer metadata\", \"transfer_invalid\");\n else failClose(\"Invalid WebLoom runtime message\", \"invalid_message\");\n });\n\n function applySnapshot(snapshot: RuntimeSnapshot): SnapshotApplyResult {\n if (disposed) return { accepted: false, reason: \"disposed\" };\n if (!snapshot || typeof snapshot !== \"object\") return { accepted: false, reason: \"invalid-snapshot\" };\n if (snapshot.protocolVersion !== RUNTIME_PROTOCOL_VERSION) return { accepted: false, reason: \"protocol-mismatch\" };\n try {\n if (snapshot.units.length > limits.maxSnapshotUnits || snapshot.services.length > limits.maxSnapshotServices) return { accepted: false, reason: \"invalid-snapshot\" };\n codec.encode({ ...snapshot, type: RUNTIME_SNAPSHOT_TYPE });\n validateDto(snapshot, { limits: { maxDepth: limits.maxDtoDepth, maxNodes: limits.maxDtoNodes, maxEdges: limits.maxDtoEdges, maxBudgetBytes: limits.maxMessageBudgetBytes }, phase: \"receive\" });\n } catch { return { accepted: false, reason: \"invalid-snapshot\" }; }\n if (options.remoteRuntimeId !== undefined && snapshot.runtimeId !== options.remoteRuntimeId) return { accepted: false, reason: \"invalid-snapshot\" };\n if (options.remoteRuntimeKind !== undefined && snapshot.runtimeKind !== options.remoteRuntimeKind) return { accepted: false, reason: \"invalid-snapshot\" };\n if (remoteRuntimeId !== undefined && snapshot.runtimeId !== remoteRuntimeId) return { accepted: false, reason: \"invalid-snapshot\" };\n if (remoteRuntimeKind !== undefined && snapshot.runtimeKind !== remoteRuntimeKind) return { accepted: false, reason: \"invalid-snapshot\" };\n let fingerprint: string;\n try { fingerprint = JSON.stringify(snapshot); } catch { return { accepted: false, reason: \"invalid-snapshot\" }; }\n if (remoteRuntimeInstanceId !== undefined && remoteRuntimeInstanceId === snapshot.runtimeInstanceId && snapshot.revision <= revision) {\n // A transport may have more than one internal observer. Replaying the\n // exact same revision is harmless and lets an observer report the state;\n // a different payload at that revision remains rejected.\n if (snapshot.revision === revision && fingerprint === appliedSnapshotFingerprint) return { accepted: true, state: currentState === \"disposed\" ? \"stale\" : currentState, revision };\n return { accepted: false, reason: \"stale-revision\", receivedRevision: snapshot.revision };\n }\n const services: ServiceReference[] = [];\n const keys = new Set<string>();\n try {\n for (const service of snapshot.state === \"ready\" ? snapshot.services : []) {\n const key = serviceKey(service);\n if (keys.has(key)) return { accepted: false, reason: \"invalid-snapshot\" };\n keys.add(key);\n services.push(Object.freeze({ kind: service.kind, capabilityId: service.capabilityId, contractVersion: service.contractVersion, runtime: snapshot.runtimeKind, runtimeInstanceId: snapshot.runtimeInstanceId, serviceInstanceId: service.serviceInstanceId, attributes: cloneFrozenAttributes(service.attributes), ...(service.grantId !== undefined ? { grantId: service.grantId } : {}), ...(service.authorizationRevision !== undefined ? { authorizationRevision: service.authorizationRevision } : {}) }));\n }\n } catch { return { accepted: false, reason: \"invalid-snapshot\" }; }\n const newRuntime = remoteRuntimeInstanceId !== undefined && remoteRuntimeInstanceId !== snapshot.runtimeInstanceId;\n // Adding a service while a proxy is waiting is not an exposure replacement.\n // Only an existing contract whose serviceInstanceId changes is a fence event;\n // otherwise the first ready snapshot would revoke a proxy created just before\n // the asynchronous directory arrived.\n const replaced = !newRuntime && remoteRuntimeInstanceId === snapshot.runtimeInstanceId\n && currentServices.some((current) => {\n const next = services.find((service) => serviceKey(service) === serviceKey(current));\n return next !== undefined && next.serviceInstanceId !== current.serviceInstanceId;\n });\n if (newRuntime || replaced) invalidate(newRuntime ? \"Remote Runtime instance changed\" : \"Remote Runtime service exposure replaced\");\n if (!newRuntime && !replaced) {\n for (const proxy of proxies.values()) {\n if (proxy.bound && !services.some((service) => serviceKey(service) === serviceKey(proxy.bound as ServiceReference) && service.serviceInstanceId === proxy.bound?.serviceInstanceId)) {\n revokeProxy(proxy, \"Remote Runtime service exposure was removed\");\n }\n }\n }\n remoteRuntimeId = snapshot.runtimeId;\n remoteRuntimeKind = snapshot.runtimeKind;\n remoteRuntimeInstanceId = snapshot.runtimeInstanceId;\n revision = snapshot.revision;\n appliedSnapshotFingerprint = fingerprint;\n currentServices = Object.freeze(services);\n currentState = snapshot.state === \"ready\" ? \"ready\" : snapshot.state === \"starting\" ? \"empty\" : snapshot.state === \"disposed\" ? \"disposed\" : \"stale\";\n if (currentState !== \"ready\" && snapshot.state !== \"starting\") for (const proxy of proxies.values()) revokeProxy(proxy, `Remote Runtime is ${snapshot.state}`);\n emit();\n return { accepted: true, state: currentState === \"disposed\" ? \"stale\" : currentState, revision };\n }\n\n const bridge: CapabilityBridge & { readonly pendingCallCount: number; readonly activeStreamCount: number; readonly retainedPayloadBytes: number } = {\n get state() { return currentState; },\n get runtimeInstanceId() { return remoteRuntimeInstanceId; },\n get runtimeKind() { return remoteRuntimeKind; },\n getClient<C extends RemoteCapability>(capability: C, scope?: LifecycleScope): CapabilityClient<C> {\n const key = `${capability.kind}\\u0000${capability.id}\\u0000${capability.version}\\u0000${scope?.identity.scopeId ?? \"root\"}`;\n let proxy = proxies.get(key);\n if (!proxy || proxy.revoked) {\n proxy = { capability, scope, cacheKey: key, revoked: false, reason: \"Capability proxy is revoked\" };\n proxies.set(key, proxy);\n scope?.onRevoke((reason) => revokeProxy(proxy as ProxyRecord, reason));\n }\n const cached = clients.get(key);\n if (cached && !proxy.revoked) return cached as CapabilityClient<C>;\n const client = capability.kind === \"rpc\"\n ? { call: (request: unknown, optionsForCall?: RpcCallOptions) => call(proxy as ProxyRecord, request, optionsForCall ?? {}) }\n : { subscribe: (request: unknown, optionsForSubscribe: StreamSubscribeOptions<unknown>) => subscribe(proxy as ProxyRecord, request, optionsForSubscribe) };\n clients.set(key, client as unknown as CapabilityClient<RemoteCapability>);\n return client as unknown as CapabilityClient<C>;\n },\n applySnapshot,\n invalidate,\n disconnect(reason = \"Runtime disconnected\") { invalidate(reason); currentState = \"stale\"; },\n dispose(reason = \"Runtime bridge disposed\") { if (disposed) return; disposed = true; invalidate(reason); removeTransport(); removeTransportError?.(); options.transport.close?.(); currentState = \"disposed\"; emit(); },\n subscribe(listener) { listeners.add(listener); return () => listeners.delete(listener); },\n services() { return currentServices; },\n get pendingCallCount() { return pendingCount; },\n get activeStreamCount() { return [...streams.values()].filter((entry) => entry.state === \"opening\" || entry.state === \"active\").length; },\n get retainedPayloadBytes() { return budget.retainedPayloadBytes; },\n };\n return bridge;\n}\n\n/** 内部 typed transfer 校验 helper;不接受 call 级临时 transfer 数组。 */\nexport function validateTransferables(value: unknown, transfer: readonly Transferable[] | undefined, limits?: RuntimeLimitsInput): readonly Transferable[] {\n return validateTransferList(value, transfer, { limits: limits ?? DEFAULT_RUNTIME_LIMITS, phase: \"validate\" });\n}\n","// MessagePort 到 v4 RuntimeTransport 的唯一适配。\n\nimport type { RuntimeReceiveMetadata, RuntimeTransport } from \"./serviceBridge.js\";\nimport type { RuntimeWireMessage } from \"../runtime/runtimeProtocol.js\";\nimport { createReceivePortLedger, normalizeRuntimeLimits, type RuntimeLimitsInput } from \"./dto.js\";\nimport { WebLoomError } from \"../contracts/lifecycle.js\";\nimport { createRuntimeMessageCodec } from \"../runtime/runtimeProtocol.js\";\n\nexport interface MessagePortLike {\n addEventListener(type: \"message\" | \"messageerror\", listener: (event: MessageEvent) => void): void;\n removeEventListener(type: \"message\" | \"messageerror\", listener: (event: MessageEvent) => void): void;\n postMessage(message: unknown, transfer?: readonly Transferable[]): void;\n start?(): void;\n close?(): void;\n}\n\n/** 将一个真实 MessagePort 绑定为双向 v4 transport。 */\nexport function createMessagePortRuntimeTransport(port: MessagePortLike, options: { readonly limits?: RuntimeLimitsInput } = {}): RuntimeTransport {\n const listeners = new Set<(message: RuntimeWireMessage, metadata?: RuntimeReceiveMetadata) => void>();\n const errorListeners = new Set<(error: unknown, metadata?: RuntimeReceiveMetadata) => void>();\n const codec = createRuntimeMessageCodec();\n const limits = normalizeRuntimeLimits(options.limits);\n const onMessage = (event: MessageEvent): void => {\n const ledger = createReceivePortLedger(event.ports ?? [], { limits, phase: \"receive\" });\n const metadata: RuntimeReceiveMetadata = Object.freeze({\n ports: ledger.ports,\n ledger,\n decoded: true,\n });\n if (!ledger.valid) {\n const error = new WebLoomError(\"transfer_invalid\", \"Invalid received transfer metadata\", \"receive\");\n for (const listener of [...errorListeners]) {\n try { listener(error, metadata); } catch { /* observer isolation */ }\n }\n return;\n }\n let message: RuntimeWireMessage;\n try { message = codec.decode(event.data); }\n catch (error) {\n ledger.closeUndelivered();\n for (const listener of [...errorListeners]) {\n try { listener(error, metadata); } catch { /* observer isolation */ }\n }\n return;\n }\n for (const listener of [...listeners]) {\n try { listener(message, metadata); } catch { /* observer isolation */ }\n }\n };\n port.addEventListener(\"message\", onMessage);\n port.start?.();\n let closed = false;\n return {\n send(message, transfer) {\n if (closed) throw new Error(\"MessagePort transport is closed\");\n port.postMessage(message, transfer);\n },\n subscribe(listener) { listeners.add(listener); return () => listeners.delete(listener); },\n subscribeError(listener) { errorListeners.add(listener); return () => errorListeners.delete(listener); },\n close() { if (closed) return; closed = true; port.removeEventListener(\"message\", onMessage); port.close?.(); listeners.clear(); errorListeners.clear(); },\n };\n}\n","// v4 MessagePort provider:同一物理端口上的反向 call/stream 分派。\n\nimport type { CapabilityPeer, HandlerCallContext, ServiceReference } from \"../contracts/capability.js\";\nimport { WebLoomError, type LifecycleScope } from \"../contracts/lifecycle.js\";\nimport {\n assertReceivedPortSet,\n createReceivePortLedger,\n createRuntimeBudget,\n normalizeRuntimeLimits,\n validateDto,\n validateRawDto,\n validateTransferList,\n type ReceivePortLedger,\n type RuntimeBudget,\n type RuntimeLimitsInput,\n} from \"./dto.js\";\nimport {\n RUNTIME_CALL_TYPE,\n RUNTIME_CANCEL_TYPE,\n RUNTIME_CREDIT_TYPE,\n RUNTIME_ERROR_MESSAGE_TYPE,\n RUNTIME_NEXT_TYPE,\n RUNTIME_PROTOCOL_VERSION,\n RUNTIME_RESULT_TYPE,\n createRuntimeMessageCodec,\n type RuntimeCallMessage,\n type RuntimeWireMessage,\n} from \"../runtime/runtimeProtocol.js\";\nimport { createMessagePortRuntimeTransport, type MessagePortLike } from \"./messagePortServiceTransport.js\";\nimport type { RuntimeTransport } from \"./serviceBridge.js\";\n\nexport interface MessagePortServiceCallInput {\n /** 已验证的 call message;request 已由生产 parser 规范化。 */\n readonly message: RuntimeCallMessage;\n /** parser 规范化后的请求。 */\n readonly request: unknown;\n /** 服务绑定身份。 */\n readonly reference: ServiceReference;\n /** 取消信号。 */\n readonly signal: AbortSignal;\n /** 本端以接收时钟计算的调用截止时间。 */\n readonly deadlineAt: number;\n /** 对端 peer 视图。 */\n readonly peer?: CapabilityPeer;\n}\n\nexport interface PreparedRequest {\n /** parser 规范化后的 DTO。 */\n readonly value: unknown;\n /** 契约声明的 transfer。 */\n readonly transfer?: readonly Transferable[];\n /** 可选的已计算计费值。 */\n readonly budgetBytes?: number;\n}\n\nexport interface MessagePortServiceProviderOptions {\n /** 兼容 standalone/testing 的当前 MessagePort;实际 Runtime 使用 shared transport。 */\n readonly port?: MessagePortLike;\n /** 当前物理 endpoint 的唯一 v4 transport。 */\n readonly transport?: RuntimeTransport;\n /** 当前可暴露的服务;返回空集合即拒绝新的调用。 */\n readonly services: () => readonly ServiceReference[];\n /** 调用 Host handler。 */\n readonly handleCall: (input: MessagePortServiceCallInput) => unknown | Promise<unknown | AsyncIterable<unknown>>;\n /** 当前 peer scope。 */\n readonly peerScope?: LifecycleScope;\n /** 默认 peer view;peerForCall 可按 handler 依赖进一步收窄。 */\n readonly peer?: CapabilityPeer;\n /** 当前 handler 所属插件允许观察的 peer view。 */\n readonly peerForCall?: (call: RuntimeCallMessage, reference: ServiceReference) => CapabilityPeer | undefined;\n /** 接收 request 的 parser/transfer 适配。 */\n readonly prepareRequest?: (call: RuntimeCallMessage, ledger: ReceivePortLedger) => PreparedRequest;\n /** 发送前验证/提取 unary response。 */\n readonly prepareResult?: (value: unknown, call: RuntimeCallMessage) => PreparedRequest;\n /** 发送前验证/提取 stream item。 */\n readonly prepareItem?: (value: unknown, call: RuntimeCallMessage) => PreparedRequest;\n /** 可信 Runtime/advanced 装配预算。 */\n readonly limits?: RuntimeLimitsInput;\n /** 可选的 Runtime 方向共享计数器。 */\n readonly budget?: RuntimeBudget;\n}\n\ninterface ActiveCall {\n readonly call: RuntimeCallMessage;\n readonly controller: AbortController;\n readonly reference: ServiceReference;\n readonly requestBytes: number;\n readonly deadlineAt: number;\n deadlineTimer?: ReturnType<typeof setTimeout>;\n removePeerRevoke?: () => void;\n pending: boolean;\n /** reserve() 为 stream 预留的活动槽;在 pending/stream 终态只释放一次。 */\n streamReserved: boolean;\n cancelled: boolean;\n /** 本端已经结束等待/交付,但业务执行仍可能未结束。 */\n frameworkSettled: boolean;\n executionReleased: boolean;\n}\n\ninterface StreamEntry {\n readonly active: ActiveCall;\n readonly call: RuntimeCallMessage;\n readonly controller: AbortController;\n readonly reference: ServiceReference;\n readonly window: number;\n iterator?: AsyncIterator<unknown>;\n credit: number;\n sequence: number;\n running: boolean;\n closed: boolean;\n iteratorDone: boolean;\n returnStarted: boolean;\n returnDone: boolean;\n pumpDone: boolean;\n}\n\nfunction safeErrorCode(error: unknown, fallback: string): string {\n return error instanceof WebLoomError ? error.code : fallback;\n}\n\nfunction post(transport: RuntimeTransport, codec: ReturnType<typeof createRuntimeMessageCodec>, message: RuntimeWireMessage, transfer: readonly Transferable[] = []): boolean {\n try { transport.send(codec.encode(message), transfer); return true; } catch { return false; }\n}\n\nfunction safeErrorMessage(code: string): string {\n const messages: Record<string, string> = {\n capability_unavailable: \"Capability is unavailable\",\n permission_denied: \"Capability authorization denied\",\n service_stale: \"Runtime service exposure is stale\",\n request_validation_failed: \"Capability request failed validation\",\n response_validation_failed: \"Capability response failed validation\",\n request_clone_failed: \"Capability request could not be delivered\",\n response_clone_failed: \"Capability response could not be delivered\",\n transfer_invalid: \"Capability transfer declaration is invalid\",\n handler_failed: \"Remote capability operation failed\",\n call_timeout: \"Capability call timed out\",\n request_cancelled: \"Capability call was cancelled\",\n service_revoked: \"Capability exposure was revoked\",\n transport_unavailable: \"Runtime transport is unavailable\",\n stream_overflow: \"Stream credit or sequence is invalid\",\n resource_limit_exceeded: \"Runtime resource limit exceeded\",\n invalid_message: \"Invalid WebLoom runtime message\",\n };\n return messages[code] ?? \"Remote capability operation failed\";\n}\n\n/** 创建一个严格 bounded 的 MessagePort provider。 */\nexport function createMessagePortServiceProvider(options: MessagePortServiceProviderOptions): {\n setServices(): void;\n dispose(): void;\n pendingCount(): number;\n executionCount(): number;\n nonCooperativeExecutionCount(): number;\n retainedPayloadBytes(): number;\n} {\n const codec = createRuntimeMessageCodec();\n const limits = normalizeRuntimeLimits(options.limits);\n const budget = options.budget ?? createRuntimeBudget(limits);\n const configuredTransport = options.transport ?? (options.port ? createMessagePortRuntimeTransport(options.port, { limits }) : undefined);\n if (!configuredTransport) throw new TypeError(\"MessagePort service provider requires transport or port\");\n const transport: RuntimeTransport = configuredTransport;\n const activeCalls = new Map<string, ActiveCall>();\n const streams = new Map<string, StreamEntry>();\n const executionSlots = new Map<string, ActiveCall>();\n let peerRetainedPayloadBytes = 0;\n let disposed = false;\n\n const serviceFor = (message: RuntimeCallMessage): ServiceReference | undefined => options.services().find((service) => (\n service.kind === (message.mode === \"stream\" ? \"stream\" : \"rpc\")\n && service.capabilityId === message.capabilityId\n && service.contractVersion === message.contractVersion\n && service.serviceInstanceId === message.serviceInstanceId\n ));\n\n const serviceErrorCode = (message: RuntimeCallMessage): \"capability_unavailable\" | \"service_stale\" => {\n // services() is the peer's visible projection. An absent contract must\n // not reveal whether a hidden provider exists; a wrong exposure identity\n // for a currently visible contract is the only stale case we can safely\n // identify at this boundary.\n const visibleContract = options.services().some((service) => (\n service.kind === (message.mode === \"stream\" ? \"stream\" : \"rpc\")\n && service.capabilityId === message.capabilityId\n && service.contractVersion === message.contractVersion\n ));\n return visibleContract ? \"service_stale\" : \"capability_unavailable\";\n };\n\n const sendError = (call: RuntimeCallMessage, code: string, phase: \"validate\" | \"wait\" | \"dispatch\" | \"execute\" | \"receive\" | \"dispose\"): void => {\n post(transport, codec, {\n type: RUNTIME_ERROR_MESSAGE_TYPE,\n protocolVersion: RUNTIME_PROTOCOL_VERSION,\n callId: call.callId,\n serviceInstanceId: call.serviceInstanceId,\n error: { code, message: safeErrorMessage(code), phase },\n });\n };\n\n const releaseExecution = (active: ActiveCall): void => {\n if (active.executionReleased) return;\n active.executionReleased = true;\n if (executionSlots.get(active.call.callId) === active) executionSlots.delete(active.call.callId);\n budget.releaseExecutionSlot();\n peerRetainedPayloadBytes = Math.max(0, peerRetainedPayloadBytes - active.requestBytes);\n budget.retainedPayloadBytes = Math.max(0, budget.retainedPayloadBytes - active.requestBytes);\n active.removePeerRevoke?.();\n active.removePeerRevoke = undefined;\n };\n\n const releaseStreamReservation = (active: ActiveCall): void => {\n if (!active.streamReserved) return;\n active.streamReserved = false;\n budget.activeStreams = Math.max(0, budget.activeStreams - 1);\n };\n\n const releasePending = (active: ActiveCall): void => {\n if (!active.pending) return;\n active.pending = false;\n if (activeCalls.get(active.call.callId) === active) activeCalls.delete(active.call.callId);\n if (active.deadlineTimer !== undefined) { clearTimeout(active.deadlineTimer); active.deadlineTimer = undefined; }\n budget.pendingCalls = Math.max(0, budget.pendingCalls - 1);\n };\n\n const finishPending = (active: ActiveCall): void => {\n releasePending(active);\n };\n\n const maybeReleaseStreamExecution = (stream: StreamEntry): void => {\n if (stream.pumpDone && stream.returnDone) releaseExecution(stream.active);\n };\n\n const returnIterator = (stream: StreamEntry): void => {\n if (stream.returnStarted) return;\n stream.returnStarted = true;\n const candidate = stream.iterator?.return;\n if (!candidate) { stream.returnDone = true; maybeReleaseStreamExecution(stream); return; }\n let result: unknown;\n try { result = candidate.call(stream.iterator); }\n catch { stream.returnDone = true; maybeReleaseStreamExecution(stream); return; }\n void Promise.resolve(result).then(() => {\n stream.returnDone = true;\n maybeReleaseStreamExecution(stream);\n }, () => {\n stream.returnDone = true;\n maybeReleaseStreamExecution(stream);\n });\n };\n\n const closeStream = (stream: StreamEntry, normalDone = false): void => {\n if (stream.closed) return;\n stream.closed = true;\n stream.active.cancelled = true;\n finishPending(stream.active);\n streams.delete(stream.call.callId);\n releaseStreamReservation(stream.active);\n if (normalDone) {\n stream.iteratorDone = true;\n stream.returnDone = true;\n maybeReleaseStreamExecution(stream);\n } else {\n // If the pump was never started (for example streamReady post failed),\n // there is no finally block that can mark it settled.\n if (!stream.running) stream.pumpDone = true;\n returnIterator(stream);\n maybeReleaseStreamExecution(stream);\n }\n };\n\n const closeLateIterable = async (value: unknown): Promise<void> => {\n try {\n if (!value || typeof (value as AsyncIterable<unknown>)[Symbol.asyncIterator] !== \"function\") return;\n const iterator = (value as AsyncIterable<unknown>)[Symbol.asyncIterator]();\n const close = iterator.return;\n if (close) await Promise.resolve(close.call(iterator));\n } catch {\n // A late iterator is already outside the consumer boundary; its cleanup\n // failure must not create an unhandled rejection or leak wire details.\n }\n };\n\n const cancelActive = (active: ActiveCall, errorCode = \"request_cancelled\"): void => {\n if (active.cancelled) return;\n active.frameworkSettled = true;\n active.cancelled = true;\n try { active.controller.abort(); } catch { /* noop */ }\n const stream = streams.get(active.call.callId);\n if (stream) closeStream(stream);\n else finishPending(active);\n void errorCode;\n };\n\n const reserve = (requestBytes: number, stream: boolean): WebLoomError | undefined => {\n if (activeCalls.size >= limits.maxPendingCallsPerPeer || budget.pendingCalls >= limits.maxPendingCallsPerRuntime) return new WebLoomError(\"resource_limit_exceeded\", safeErrorMessage(\"resource_limit_exceeded\"), \"dispatch\");\n if (executionSlots.size >= limits.maxExecutionSlotsPerPeer || budget.executionSlots >= limits.maxExecutionSlotsPerRuntime) return new WebLoomError(\"resource_limit_exceeded\", safeErrorMessage(\"resource_limit_exceeded\"), \"dispatch\");\n if (stream && (streams.size >= limits.maxActiveStreamsPerPeer || budget.activeStreams >= limits.maxActiveStreamsPerRuntime)) return new WebLoomError(\"resource_limit_exceeded\", safeErrorMessage(\"resource_limit_exceeded\"), \"dispatch\");\n if (requestBytes > limits.maxMessageBudgetBytes\n || peerRetainedPayloadBytes > limits.maxRetainedPayloadBytesPerPeer - requestBytes\n || budget.retainedPayloadBytes > limits.maxRetainedPayloadBytesPerRuntime - requestBytes) return new WebLoomError(\"resource_limit_exceeded\", safeErrorMessage(\"resource_limit_exceeded\"), \"dispatch\");\n budget.pendingCalls += 1;\n if (stream) budget.activeStreams += 1;\n budget.executionSlots += 1;\n peerRetainedPayloadBytes += requestBytes;\n budget.retainedPayloadBytes += requestBytes;\n return undefined;\n };\n\n const prepareRequest = (call: RuntimeCallMessage, ledger: ReceivePortLedger): { value: unknown; budgetBytes: number } => {\n try { validateRawDto(call.request, limits, \"receive\"); } catch (error) { ledger.closeUndelivered(); throw error; }\n let prepared: PreparedRequest;\n try { prepared = options.prepareRequest?.(call, ledger) ?? { value: call.request }; }\n catch (error) { ledger.closeUndelivered(); throw error; }\n let transfer: readonly Transferable[];\n try { transfer = validateTransferList(prepared.value, prepared.transfer, { limits, phase: \"receive\" }); }\n catch (error) { ledger.closeUndelivered(); throw error; }\n try { assertReceivedPortSet(ledger, transfer, { limits, phase: \"receive\" }); }\n catch (error) { ledger.closeUndelivered(); throw error; }\n const stats = validateDto(prepared.value, { limits: { maxDepth: limits.maxDtoDepth, maxNodes: limits.maxDtoNodes, maxEdges: limits.maxDtoEdges, maxBudgetBytes: limits.maxMessageBudgetBytes }, transferables: new Set(transfer), phase: \"receive\" });\n // Quota ownership always uses the production walker result. An adapter's\n // optional precomputed field must not be able to under-report a normalized\n // payload and bypass retained-byte limits.\n return { value: prepared.value, budgetBytes: stats.budgetBytes };\n };\n\n const prepareOutput = (prepared: PreparedRequest, ledger?: ReceivePortLedger): { value: unknown; transfer: readonly Transferable[] } => {\n try {\n const transfer = validateTransferList(prepared.value, prepared.transfer, { limits, phase: \"receive\" });\n if (ledger) assertReceivedPortSet(ledger, transfer, { limits, phase: \"receive\" });\n validateDto(prepared.value, { limits: { maxDepth: limits.maxDtoDepth, maxNodes: limits.maxDtoNodes, maxEdges: limits.maxDtoEdges, maxBudgetBytes: limits.maxMessageBudgetBytes }, transferables: new Set(transfer), phase: \"receive\" });\n return { value: prepared.value, transfer };\n } catch (error) { ledger?.closeUndelivered(); throw error; }\n };\n\n const pump = async (entry: StreamEntry): Promise<void> => {\n if (entry.running || entry.closed || !entry.iterator) return;\n entry.running = true;\n try {\n while (!entry.closed && !entry.active.cancelled && entry.credit > 0) {\n let next: IteratorResult<unknown>;\n try { next = await entry.iterator.next(); }\n catch (error) {\n if (!entry.closed && !entry.active.cancelled) sendError(entry.call, safeErrorCode(error, \"handler_failed\"), \"execute\");\n closeStream(entry);\n break;\n }\n if (entry.closed || entry.active.cancelled) break;\n if (next.done) {\n entry.iteratorDone = true;\n if (post(transport, codec, { type: RUNTIME_RESULT_TYPE, protocolVersion: RUNTIME_PROTOCOL_VERSION, callId: entry.call.callId, serviceInstanceId: entry.reference.serviceInstanceId, done: true })) closeStream(entry, true);\n else { sendError(entry.call, \"transport_unavailable\", \"receive\"); closeStream(entry, true); }\n break;\n }\n try {\n const prepared = options.prepareItem?.(next.value, entry.call) ?? { value: next.value };\n const output = prepareOutput(prepared);\n if (!post(transport, codec, { type: RUNTIME_NEXT_TYPE, protocolVersion: RUNTIME_PROTOCOL_VERSION, callId: entry.call.callId, serviceInstanceId: entry.reference.serviceInstanceId, sequence: entry.sequence, item: output.value }, output.transfer)) {\n sendError(entry.call, \"response_clone_failed\", \"receive\");\n closeStream(entry);\n break;\n }\n entry.credit -= 1;\n entry.sequence += 1;\n } catch (error) {\n if (!entry.closed && !entry.active.cancelled) sendError(entry.call, safeErrorCode(error, \"response_validation_failed\"), \"receive\");\n closeStream(entry);\n break;\n }\n }\n } finally {\n entry.running = false;\n entry.pumpDone = true;\n maybeReleaseStreamExecution(entry);\n }\n };\n\n const onMessage = (message: RuntimeWireMessage, metadata?: import(\"./serviceBridge.js\").RuntimeReceiveMetadata): void => {\n const ledger = metadata?.ledger ?? createReceivePortLedger(metadata?.ports, { limits, phase: \"receive\" });\n if (!ledger.valid) { failClose(); return; }\n\n if (message.type === RUNTIME_CANCEL_TYPE) {\n ledger.closeUndelivered();\n const active = activeCalls.get(message.callId) ?? streams.get(message.callId)?.active;\n if (!active || active.reference.serviceInstanceId !== message.serviceInstanceId) return;\n cancelActive(active);\n return;\n }\n\n if (message.type === RUNTIME_CREDIT_TYPE) {\n ledger.closeUndelivered();\n const stream = streams.get(message.callId);\n const valid = stream !== undefined\n && stream.reference.serviceInstanceId === message.serviceInstanceId\n && Number.isSafeInteger(message.count)\n && message.count >= 1\n && message.count <= limits.maxStreamCredit\n && stream.credit + message.count <= stream.window;\n if (!valid) {\n if (stream && !stream.active.cancelled) sendError(stream.call, \"stream_overflow\", \"receive\");\n if (stream) closeStream(stream);\n return;\n }\n stream.credit += message.count;\n void pump(stream);\n return;\n }\n\n // The physical port is bidirectional: result/next/snapshot messages are\n // consumed by the bridge listener on this same port. They are not an\n // invalid provider message and their business ports must remain available\n // to that listener.\n if (message.type !== RUNTIME_CALL_TYPE) return;\n const reference = serviceFor(message);\n if (!reference) { ledger.closeUndelivered(); sendError(message, serviceErrorCode(message), \"dispatch\"); return; }\n if (activeCalls.has(message.callId) || executionSlots.has(message.callId)) { ledger.closeUndelivered(); sendError(message, \"invalid_message\", \"dispatch\"); return; }\n if (message.grantId !== undefined && message.grantId !== reference.grantId) { ledger.closeUndelivered(); sendError(message, \"permission_denied\", \"dispatch\"); return; }\n const initialCredit = message.initialCredit;\n if (message.mode === \"stream\" && (!Number.isSafeInteger(initialCredit) || (initialCredit as number) < 1 || (initialCredit as number) > limits.maxStreamCredit)) {\n ledger.closeUndelivered();\n sendError(message, \"stream_overflow\", \"validate\");\n return;\n }\n let request: { value: unknown; budgetBytes: number };\n try { request = prepareRequest(message, ledger); }\n catch (error) { sendError(message, safeErrorCode(error, \"request_validation_failed\"), error instanceof WebLoomError ? error.phase : \"receive\"); return; }\n const quotaError = reserve(request.budgetBytes, message.mode === \"stream\");\n if (quotaError) { ledger.closeUndelivered(); sendError(message, quotaError.code, \"dispatch\"); return; }\n // Request ports are now part of the handler DTO. The handler owns them only\n // after this point; provider no longer closes them on later cancellation.\n ledger.handoff();\n const controller = new AbortController();\n const active: ActiveCall = { call: { ...message, request: request.value }, controller, reference, requestBytes: request.budgetBytes, deadlineAt: Date.now() + message.timeoutMs, pending: true, streamReserved: message.mode === \"stream\", cancelled: false, frameworkSettled: false, executionReleased: false };\n activeCalls.set(message.callId, active);\n executionSlots.set(message.callId, active);\n if (options.peerScope) active.removePeerRevoke = options.peerScope.onRevoke(() => cancelActive(active, \"service_revoked\"));\n active.deadlineTimer = setTimeout(() => cancelActive(active, \"call_timeout\"), message.timeoutMs);\n const callPeer = options.peerForCall?.(active.call, reference) ?? options.peer;\n\n void (async () => {\n let stream: StreamEntry | undefined;\n try {\n if (active.cancelled || disposed) { releaseExecution(active); return; }\n const result = await options.handleCall({ message: active.call, request: request.value, reference, signal: controller.signal, deadlineAt: active.deadlineAt, peer: callPeer });\n if (active.cancelled || disposed || executionSlots.get(message.callId) !== active) {\n if (message.mode === \"stream\") await closeLateIterable(result);\n releaseExecution(active);\n return;\n }\n if (message.mode === \"unary\") {\n try {\n const output = prepareOutput(options.prepareResult?.(result, active.call) ?? { value: result });\n if (!active.cancelled && !post(transport, codec, { type: RUNTIME_RESULT_TYPE, protocolVersion: RUNTIME_PROTOCOL_VERSION, callId: message.callId, serviceInstanceId: reference.serviceInstanceId, result: output.value }, output.transfer)) sendError(message, \"response_clone_failed\", \"receive\");\n } catch (error) { if (!active.cancelled) sendError(message, safeErrorCode(error, \"response_validation_failed\"), \"receive\"); }\n finishPending(active);\n releaseExecution(active);\n return;\n }\n if (!result || typeof (result as AsyncIterable<unknown>)[Symbol.asyncIterator] !== \"function\") throw new WebLoomError(\"handler_failed\", \"Stream handler did not return AsyncIterable\", \"execute\");\n const iterator = (result as AsyncIterable<unknown>)[Symbol.asyncIterator]();\n // An acquired iterator remains an execution slot while it is idle on\n // zero credit. It is released only after natural exhaustion or a\n // completed iterator.return().\n stream = { active, call: active.call, controller, reference, window: message.initialCredit ?? 16, iterator, credit: message.initialCredit ?? 16, sequence: 1, running: false, closed: false, iteratorDone: false, returnStarted: false, returnDone: false, pumpDone: false };\n streams.set(message.callId, stream);\n if (!post(transport, codec, { type: RUNTIME_RESULT_TYPE, protocolVersion: RUNTIME_PROTOCOL_VERSION, callId: message.callId, serviceInstanceId: reference.serviceInstanceId, streamReady: true })) {\n sendError(message, \"transport_unavailable\", \"dispatch\");\n closeStream(stream);\n return;\n }\n releasePending(active);\n void pump(stream);\n } catch (error) {\n if (!active.cancelled && !disposed) sendError(message, safeErrorCode(error, \"handler_failed\"), error instanceof WebLoomError ? error.phase : \"execute\");\n if (stream) closeStream(stream);\n else { finishPending(active); releaseExecution(active); }\n }\n })().catch(() => {\n const lateStream = streams.get(active.call.callId);\n if (lateStream) closeStream(lateStream);\n else { finishPending(active); releaseExecution(active); }\n });\n };\n\n function dispose(): void {\n if (disposed) return;\n disposed = true;\n for (const active of [...activeCalls.values()]) cancelActive(active, \"service_revoked\");\n for (const stream of [...streams.values()]) closeStream(stream);\n removeTransport();\n }\n\n function failClose(): void {\n dispose();\n try { transport.close?.(); } catch { /* best effort */ }\n }\n\n const removeTransport = transport.subscribe(onMessage);\n return {\n setServices() { /* provider reads the current projection at dispatch time */ },\n dispose,\n pendingCount() { return activeCalls.size; },\n executionCount() { return executionSlots.size; },\n nonCooperativeExecutionCount() { return [...executionSlots.values()].filter((active) => active.frameworkSettled).length; },\n retainedPayloadBytes() { return budget.retainedPayloadBytes; },\n };\n}\n","import { capabilityKey, type CapabilityDescriptor, type CapabilityPeer, type CapabilityClient, type RemoteCapability, type CapabilityBridge, type PeerScopeView } from \"../contracts/capability.js\";\nimport type { LifecycleScope } from \"../contracts/lifecycle.js\";\nimport { WebLoomError } from \"../contracts/lifecycle.js\";\n\n/** 将可信 peer controller 收窄为真正独立的普通 handler 作用域视图。 */\nexport function createPeerScopeView(scope: LifecycleScope): PeerScopeView {\n return Object.freeze({\n get state() { return scope.state; },\n signal: scope.signal,\n onRevoke(listener: (reason: string) => void) { return scope.onRevoke(listener); },\n });\n}\n\n/** 只复制 peer view 的公开字段,避免通过类型断言泄露 controller。 */\nexport function freezePeerView(peer: CapabilityPeer): CapabilityPeer {\n return Object.freeze(peer);\n}\n\nexport interface CreatePeerViewOptions {\n /** 当前物理连接的 opaque peer id。 */\n readonly peerId: string;\n /** 独立的只读 scope facade。 */\n readonly scope: PeerScopeView;\n /** 当前连接 bridge;其目录身份由 bridge 管理。 */\n readonly bridge: CapabilityBridge;\n /** handler 所属插件声明的 peer capability allowlist;undefined 仅供可信装配使用。 */\n readonly allowed?: readonly CapabilityDescriptor[];\n /** 代理绑定的完整 peer scope。 */\n readonly capabilityScope?: LifecycleScope;\n}\n\n/** 创建真正独立的 PeerView;不把 PeerController 通过类型断言传给普通 handler。 */\nexport function createCapabilityPeerView(options: CreatePeerViewOptions): CapabilityPeer {\n const allowed = options.allowed === undefined\n ? undefined\n : new Set(options.allowed.map((descriptor) => capabilityKey(descriptor)));\n return Object.freeze({\n peerId: options.peerId,\n get runtime() { return options.bridge.runtimeKind; },\n get runtimeInstanceId() { return options.bridge.runtimeInstanceId; },\n scope: options.scope,\n capability<C extends RemoteCapability>(capability: C): CapabilityClient<C> {\n if (allowed && !allowed.has(capabilityKey(capability))) {\n throw new WebLoomError(\"capability_unavailable\", \"Capability is unavailable\", \"dispatch\", { capabilityId: capability.id });\n }\n return options.bridge.getClient(capability, options.capabilityScope) as CapabilityClient<C>;\n },\n });\n}\n","// Window → SharedWorker 的 v4 双向连接。\n\nimport type { CapabilityBridge, CapabilityClient, CapabilityPeer, RemoteCapability, ServiceReference } from \"../contracts/capability.js\";\nimport { capabilityKey } from \"../contracts/capability.js\";\nimport type { LifecycleDisposeResult, RuntimeSnapshot } from \"../contracts/lifecycle.js\";\nimport { WebLoomError } from \"../contracts/lifecycle.js\";\nimport { createCapabilityPeerView, createPeerScopeView } from \"./peerView.js\";\nimport { cloneFrozenAttributes, createRuntimeBudget, normalizeRuntimeLimits, type RuntimeBudget, type RuntimeLimitsInput } from \"../transport/dto.js\";\nimport type { WindowApp, RuntimeHandle, RuntimeStatusListener, RuntimeStatusSnapshot } from \"./runtimeTypes.js\";\nimport { RuntimeUnavailableError } from \"./runtimeTypes.js\";\nimport { createCapabilityBridge } from \"../transport/serviceBridge.js\";\nimport { createMessagePortRuntimeTransport, type MessagePortLike } from \"../transport/messagePortServiceTransport.js\";\nimport { createMessagePortServiceProvider } from \"../transport/messagePortServiceProvider.js\";\nimport { invokeCapabilityHandler } from \"../host/capabilityRegistry.js\";\nimport { hostForWindowApp } from \"./windowRuntime.js\";\nimport { RUNTIME_ERROR_TYPE, RUNTIME_PROTOCOL_VERSION, RUNTIME_SNAPSHOT_TYPE } from \"./runtimeProtocol.js\";\n\nexport interface SharedWorkerLike {\n /** SharedWorker 主端口。 */\n readonly port: MessagePort;\n /** Worker error callback。 */\n onerror?: (event: Event) => void;\n addEventListener?(type: \"error\", listener: (event: Event) => void): void;\n removeEventListener?(type: \"error\", listener: (event: Event) => void): void;\n}\n\nexport type SharedWorkerFactory = (url: string | URL, options: { type: \"module\"; name?: string; credentials?: RequestCredentials }) => SharedWorkerLike;\n\nexport interface SharedWorkerClientExposure {\n /** 已完成本地初始化的 WindowApp。 */\n readonly app: WindowApp;\n /** 明确暴露给 Worker 的 RPC/stream capability。 */\n readonly expose?: readonly RemoteCapability[];\n}\n\nexport interface ConnectSharedWorkerOptions {\n /** Worker Runtime 逻辑标识。 */\n readonly id: string;\n /** Worker 构建 URL。 */\n readonly url: string | URL;\n /** SharedWorker name。 */\n readonly name?: string;\n /** 请求 credentials。 */\n readonly credentials?: RequestCredentials;\n /** 默认 call 预算。 */\n readonly defaultCallTimeoutMs?: number;\n /** 可信 transport 配额;只能使用默认值或收紧。 */\n readonly limits?: RuntimeLimitsInput;\n /** 可选的页面反向能力。 */\n readonly client?: SharedWorkerClientExposure;\n}\n\ninterface InternalOptions extends ConnectSharedWorkerOptions { readonly workerFactory?: SharedWorkerFactory; }\nconst handleBridges = new WeakMap<object, CapabilityBridge>();\n\nfunction makeWorker(options: InternalOptions): SharedWorkerLike {\n const workerOptions = { type: \"module\" as const, ...(options.name !== undefined ? { name: options.name } : {}), ...(options.credentials !== undefined ? { credentials: options.credentials } : {}) };\n if (options.workerFactory) return options.workerFactory(options.url, workerOptions);\n const WorkerConstructor = (globalThis as unknown as { SharedWorker?: new (url: string | URL, options: typeof workerOptions) => SharedWorkerLike }).SharedWorker;\n if (!WorkerConstructor) throw new RuntimeUnavailableError(\"SharedWorker is not supported by this browser\");\n return new WorkerConstructor(options.url, workerOptions);\n}\n\nfunction message(error: unknown): string { return error instanceof Error ? error.message : String(error); }\n\nfunction snapshotForClient(app: WindowApp, runtimeId: string, runtimeInstanceId: string, exposed: readonly RemoteCapability[], revision: number): RuntimeSnapshot & { readonly type: typeof RUNTIME_SNAPSHOT_TYPE } {\n const allowed = new Set(exposed.map((capability) => capabilityKey(capability)));\n const state = app.state();\n const runtimeState: RuntimeSnapshot[\"state\"] = state.state === \"disconnected\" ? \"failed\" : state.state;\n return {\n type: RUNTIME_SNAPSHOT_TYPE,\n protocolVersion: RUNTIME_PROTOCOL_VERSION,\n runtimeId,\n runtimeKind: \"window-main\",\n runtimeInstanceId,\n revision,\n state: runtimeState,\n units: state.units,\n services: runtimeState === \"ready\" ? state.services.filter((service) => allowed.has(capabilityKey({ kind: service.kind, id: service.capabilityId, version: service.contractVersion }))).map((service) => ({ kind: service.kind, capabilityId: service.capabilityId, contractVersion: service.contractVersion, serviceInstanceId: service.serviceInstanceId, attributes: cloneFrozenAttributes(service.attributes), ...(service.grantId !== undefined ? { grantId: service.grantId } : {}), ...(service.authorizationRevision !== undefined ? { authorizationRevision: service.authorizationRevision } : {}) })) : [],\n };\n}\n\nfunction connectInternal(options: InternalOptions): RuntimeHandle {\n if (!options || typeof options.id !== \"string\" || options.id.trim() === \"\") throw new TypeError(\"SharedWorker runtime id must be a non-empty string\");\n const requestedClientHost = options.client ? hostForWindowApp(options.client.app) : undefined;\n const exposed = options.client?.expose ?? [];\n for (const capability of exposed) {\n if ((capability as { readonly kind?: string }).kind !== \"rpc\" && (capability as { readonly kind?: string }).kind !== \"stream\") throw new TypeError(`Capability \"${(capability as { readonly id?: string }).id ?? \"unknown\"}\" is not remotely exposable`);\n if (!requestedClientHost?.capabilities.registration(capability)) throw new TypeError(`Capability \"${capability.id}\" is not registered by the WindowApp`);\n }\n const worker = makeWorker(options);\n const port = worker.port;\n if (!port) throw new RuntimeUnavailableError(\"SharedWorker did not expose a MessagePort\");\n const limits = normalizeRuntimeLimits(options.limits);\n const transport = createMessagePortRuntimeTransport({\n addEventListener(type, listener) { port.addEventListener(type, listener); },\n removeEventListener(type, listener) { port.removeEventListener(type, listener); },\n postMessage(messageValue, transfer) { (port as unknown as MessagePortLike).postMessage(messageValue, transfer ? [...transfer] : undefined); },\n start() { port.start(); },\n close() { try { port.close(); } catch { /* noop */ } },\n }, { limits });\n const outboundBudget: RuntimeBudget = createRuntimeBudget(limits);\n const inboundBudget: RuntimeBudget = createRuntimeBudget(limits);\n const bridge = createCapabilityBridge({ transport, remoteRuntimeKind: \"shared-worker\", remoteRuntimeId: options.id, defaultCallTimeoutMs: options.defaultCallTimeoutMs, limits, budget: outboundBudget });\n const listeners = new Set<RuntimeStatusListener>();\n const workerInstanceId = { value: \"\" };\n const localRuntimeInstanceId = options.client?.app.runtimeInstanceId ?? `window:${Date.now().toString(36)}`;\n let revision = 0;\n let disposed = false;\n let current: RuntimeStatusSnapshot = Object.freeze({ protocolVersion: RUNTIME_PROTOCOL_VERSION, runtimeId: options.id, runtimeKind: \"shared-worker\", runtimeInstanceId: \"\", state: \"starting\", revision: 0, units: [], services: [] });\n const clientHost = requestedClientHost;\n const clientPeerScope = options.client && clientHost\n ? clientHost.rootScope.child(\"peer\", { attributes: { peerId: `peer:${Date.now().toString(36)}:${Math.random().toString(36).slice(2)}` } })\n : undefined;\n const clientPeerScopeView = clientPeerScope ? createPeerScopeView(clientPeerScope) : undefined;\n const clientPeer: CapabilityPeer | undefined = clientPeerScope && clientPeerScopeView ? createCapabilityPeerView({\n peerId: clientPeerScope.identity.attributes.peerId as string,\n scope: clientPeerScopeView,\n bridge,\n capabilityScope: clientPeerScope,\n }) : undefined;\n const provider = options.client && clientHost ? createMessagePortServiceProvider({\n transport,\n peerScope: clientPeerScope,\n peer: clientPeer,\n budget: inboundBudget,\n limits,\n services: () => clientHost.serviceReferences().filter((service) => exposed.some((capability) => capabilityKey(capability) === capabilityKey({ kind: service.kind, id: service.capabilityId, version: service.contractVersion }))),\n peerForCall: (_call, reference) => {\n const registration = clientHost.capabilities.registration({ kind: reference.kind, id: reference.capabilityId, version: reference.contractVersion });\n return clientPeerScope && clientPeerScopeView ? createCapabilityPeerView({\n peerId: clientPeerScope.identity.attributes.peerId as string,\n scope: clientPeerScopeView,\n bridge,\n allowed: registration?.peerDependencies ?? [],\n capabilityScope: clientPeerScope,\n }) : undefined;\n },\n prepareRequest: (call) => {\n const registration = clientHost.capabilities.registration({ kind: call.mode === \"stream\" ? \"stream\" : \"rpc\", id: call.capabilityId, version: call.contractVersion });\n if (!registration || registration.capability.kind !== (call.mode === \"stream\" ? \"stream\" : \"rpc\")) throw new WebLoomError(\"service_stale\", \"Window service exposure is stale\", \"dispatch\");\n const capability = registration.capability as typeof registration.capability & { request: { parse(value: unknown): unknown }; transfer?: { request?: (value: unknown) => readonly Transferable[] } };\n let value: unknown;\n try { value = capability.request.parse(call.request); } catch { throw new WebLoomError(\"request_validation_failed\", \"Capability request failed validation\", \"receive\"); }\n return { value, transfer: capability.transfer?.request?.(value) };\n },\n handleCall: async ({ request, reference, signal, deadlineAt, peer }) => {\n const registration = clientHost.capabilities.registration({ kind: reference.kind, id: reference.capabilityId, version: reference.contractVersion });\n if (!registration) throw new WebLoomError(\"service_stale\", \"Window exposure is no longer available\", \"dispatch\");\n const handler = registration.handler as ((value: unknown, context: import(\"../contracts/capability.js\").HandlerCallContext) => unknown | Promise<unknown>) | undefined;\n if (!handler) throw new WebLoomError(\"service_stale\", \"Window service handler is unavailable\", \"dispatch\");\n return handler(request, { signal, deadlineAt, reference, origin: \"remote\", peer });\n },\n prepareResult: (value, call) => {\n const registration = clientHost.capabilities.registration({ kind: \"rpc\", id: call.capabilityId, version: call.contractVersion });\n if (!registration || registration.capability.kind !== \"rpc\") throw new Error(\"Window RPC registration disappeared\");\n const rpc = registration.capability as typeof registration.capability & { response: { parse(value: unknown): unknown }; transfer?: { response?: (value: unknown) => readonly Transferable[] } };\n const parsed = rpc.response.parse(value);\n return { value: parsed, transfer: rpc.transfer?.response?.(parsed) };\n },\n prepareItem: (value, call) => {\n const registration = clientHost.capabilities.registration({ kind: \"stream\", id: call.capabilityId, version: call.contractVersion });\n if (!registration || registration.capability.kind !== \"stream\") throw new Error(\"Window stream registration disappeared\");\n const stream = registration.capability as typeof registration.capability & { item: { parse(value: unknown): unknown }; transfer?: { item?: (value: unknown) => readonly Transferable[] } };\n const parsed = stream.item.parse(value);\n return { value: parsed, transfer: stream.transfer?.item?.(parsed) };\n },\n }) : undefined;\n\n const emit = (next: RuntimeStatusSnapshot): void => { current = Object.freeze({ ...next, units: Object.freeze([...next.units]), services: Object.freeze([...next.services]) }); for (const listener of [...listeners]) { try { listener(current); } catch { /* observer isolation */ } } };\n const sendClientSnapshot = (): void => { if (!options.client || disposed) return; revision += 1; try { transport.send(snapshotForClient(options.client.app, `${options.client.app.runtimeId}`, localRuntimeInstanceId, exposed, revision)); } catch { /* bridge deadline handles disconnect */ } };\n const removeRaw = transport.subscribe((messageValue) => {\n if (messageValue.type === RUNTIME_SNAPSHOT_TYPE && messageValue.runtimeKind === \"shared-worker\") {\n const applied = bridge.applySnapshot(messageValue);\n if (applied.accepted) {\n workerInstanceId.value = messageValue.runtimeInstanceId;\n emit({ protocolVersion: RUNTIME_PROTOCOL_VERSION, runtimeId: messageValue.runtimeId, runtimeKind: messageValue.runtimeKind, runtimeInstanceId: messageValue.runtimeInstanceId, state: messageValue.state, revision: messageValue.revision, units: messageValue.units, services: messageValue.services });\n }\n } else if (messageValue.type === RUNTIME_ERROR_TYPE) {\n bridge.invalidate(messageValue.message);\n emit({ ...current, state: \"failed\", error: messageValue.message, units: [], services: [] });\n }\n });\n const onError = (): void => { if (!disposed) { clientPeerScope?.revoke(\"SharedWorker disconnected\"); provider?.dispose(); bridge.disconnect(\"SharedWorker disconnected\"); emit({ ...current, state: \"disconnected\", runtimeInstanceId: \"\", revision: 0, units: [], services: [], error: \"SharedWorker disconnected\" }); } };\n port.addEventListener(\"messageerror\", onError);\n if (worker.addEventListener) worker.addEventListener(\"error\", onError);\n else worker.onerror = onError;\n sendClientSnapshot();\n const removeClient = options.client?.app.subscribe(() => sendClientSnapshot());\n\n const handle: RuntimeHandle = {\n runtimeKind: \"shared-worker\", runtimeId: options.id,\n get runtimeInstanceId() { return workerInstanceId.value; },\n state: () => current,\n capability<C extends RemoteCapability>(capability: C): CapabilityClient<C> { return bridge.getClient(capability); },\n optionalCapability<C extends RemoteCapability>(capability: C): CapabilityClient<C> | undefined { return bridge.services().some((service) => service.kind === capability.kind && service.capabilityId === capability.id && service.contractVersion === capability.version) ? bridge.getClient(capability) : undefined; },\n inspect: () => Object.freeze({ ...current, pendingCallCount: bridge.pendingCallCount, activeStreamCount: bridge.activeStreamCount, peerCount: current.state === \"ready\" ? 1 : 0 }),\n subscribe(listener) { listeners.add(listener); listener(current); return () => listeners.delete(listener); },\n dispose(reason = \"SharedWorker connection disposed\"): Promise<void> { if (disposed) return Promise.resolve(); disposed = true; emit({ ...current, state: \"stopping\" }); removeClient?.(); removeRaw(); clientPeerScope?.revoke(reason); provider?.dispose(); bridge.dispose(reason); port.removeEventListener(\"messageerror\", onError); worker.removeEventListener?.(\"error\", onError); transport.close?.(); emit({ ...current, state: \"disposed\", runtimeInstanceId: \"\", revision: 0, units: [], services: [] }); return clientPeerScope ? clientPeerScope.dispose({ reason }).then(() => undefined) : Promise.resolve(); },\n };\n handleBridges.set(handle as object, bridge);\n return handle;\n}\n\n/** 同步创建 RuntimeHandle;ready 由 state/capability Promise 观察。 */\nexport function connectSharedWorker(options: ConnectSharedWorkerOptions): RuntimeHandle { return connectInternal(options); }\n\n/** testing 入口才允许注入可控 Worker 工厂。 */\nexport function connectSharedWorkerForTesting(options: ConnectSharedWorkerOptions, workerFactory: SharedWorkerFactory): RuntimeHandle { return connectInternal({ ...options, workerFactory }); }\n\n/** advanced 装配层取得连接 bridge;普通 RuntimeHandle 不暴露该实现细节。 */\nexport function bridgeForRuntimeHandle(handle: RuntimeHandle): CapabilityBridge {\n const bridge = handleBridges.get(handle as object);\n if (!bridge) throw new Error(\"RuntimeHandle is not owned by WebLoom\");\n return bridge;\n}\n"]}