{"version":3,"sources":["../src/core/errors.ts","../src/core/autosave.ts","../src/state/reducer.ts","../src/cache/validationCache.ts","../src/cache/payloadCache.ts","../src/metrics/collector.ts","../src/utils/logger.ts","../src/utils/pickChanged.ts","../src/adapters/rhf/utils/transforms.ts","../src/utils/mapKeys.ts","../src/adapters/rhf/utils/composeTransport.ts","../src/adapters/rhf/utils/diff.ts","../src/adapters/rhf/hooks/useBaseline.ts","../src/adapters/rhf/managers/InternalUndoManager.ts","../src/adapters/rhf/hooks/useUndoRedo.ts","../src/adapters/rhf/hooks/usePendingState.ts","../src/strategies/validation/strategies.ts","../src/strategies/validation/index.ts","../src/adapters/rhf/hooks/useDebouncedSave.ts","../src/adapters/rhf/hooks/useAutosaveEffects.ts","../src/adapters/rhf/useRhfAutosave.ts","../src/adapters/trpc/transport.ts","../src/strategies/transport/retry.ts","../src/strategies/transport/compose.ts","../src/utils/debounce.ts","../src/testing/testUtils.ts","../src/helpers/pendingChanges.ts"],"names":["duration","deepEqual","useRef","useCallback","undidSomething","useReducer","useEffect","_a","_b","_c","useMemo","sig"],"mappings":";;;;;AAAO,IAAM,aAAA,GAAN,MAAM,cAAA,SAAsB,KAAA,CAAM;AAAA,EACvC,WAAA,CACE,OAAA,EACO,IAAA,EACA,aAAA,EACA,QAAA,EACP;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAJN,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACA,IAAA,IAAA,CAAA,aAAA,GAAA,aAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAGP,IAAA,IAAA,CAAK,IAAA,GAAO,eAAA;AAAA,EACd;AAAA,EAEA,OAAO,WAAA,CAAY,KAAA,EAAgB,IAAA,GAAO,eAAA,EAAgC;AACxE,IAAA,IAAI,KAAA,YAAiB,gBAAe,OAAO,KAAA;AAE3C,IAAA,MAAM,aAAA,GACJ,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AAC1D,IAAA,OAAO,IAAI,cAAA;AAAA,MACT,CAAA,iBAAA,EAAoB,cAAc,OAAO,CAAA,CAAA;AAAA,MACzC,IAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACF;AAEO,IAAM,cAAA,GAAN,cAA6B,aAAA,CAAc;AAAA,EAChD,WAAA,CAAY,SAAiB,aAAA,EAAuB;AAClD,IAAA,KAAA,CAAM,OAAA,EAAS,mBAAmB,aAAa,CAAA;AAAA,EACjD;AACF;AAEO,IAAM,eAAA,GAAN,cAA8B,aAAA,CAAc;AAAA,EACjD,WAAA,CAAY,SAAwB,YAAA,EAAyB;AAC3D,IAAA,KAAA,CAAM,OAAA,EAAS,kBAAA,EAAoB,MAAA,EAAW,EAAE,cAAc,CAAA;AAD5B,IAAA,IAAA,CAAA,YAAA,GAAA,YAAA;AAAA,EAEpC;AACF;AAEO,IAAM,SAAA,GAAN,cAAwB,aAAA,CAAc;AAAA,EAC3C,WAAA,CAAY,OAAA,EAAwB,KAAA,EAAgB,aAAA,EAAuB;AACzE,IAAA,KAAA,CAAM,OAAA,EAAS,YAAA,EAAc,aAAA,EAAe,EAAE,OAAO,CAAA;AADnB,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAAA,EAEpC;AACF;;;AC7BO,IAAM,kBAAN,MAAsB;AAAA,EAQ3B,WAAA,CACmB,WACA,UAAA,GAAa,GAAA,EACb,QACA,KAAA,GAAQ,EAAE,UAAA,EAAY,YAAA,EAAa,EACpD;AAJiB,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AACA,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAXnB,IAAA,IAAA,CAAQ,UAAuB,EAAC;AAChC,IAAA,IAAA,CAAQ,UAAA,GAAa,KAAA;AACrB,IAAA,IAAA,CAAQ,WAAA,GAAc,KAAA;AACtB,IAAA,IAAA,CAAQ,eAAA,GAA0C,IAAA;AAClD,IAAA,IAAA,CAAQ,UAAA,GAAa,CAAA;AACrB,IAAA,IAAA,CAAiB,UAAA,GAAa,CAAA;AAAA,EAO3B;AAAA,EAEH,YAAY,KAAA,EAA0B;AA1BxC,IAAA,IAAA,EAAA;AA2BI,IAAA,CAAA,EAAA,GAAA,IAAA,CAAK,MAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,KAAA,CAAM,iBAAA,EAAmB;AAAA,MACpC,KAAA;AAAA,MACA,gBAAgB,IAAA,CAAK;AAAA,KACvB,CAAA;AAGA,IAAA,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,OAAA,CAAQ,CAAC,GAAA,KAAQ;AAClC,MAAA,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA,GAAK,KAAA,CAAc,GAAG,CAAA;AAAA,IACxC,CAAC,CAAA;AAAA,EAIH;AAAA,EAEA,MAAM,KAAA,GAA6B;AAzCrC,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA0CI,IAAA,IAAI,IAAA,CAAK,SAAQ,EAAG;AAClB,MAAA,OAAO,EAAE,IAAI,IAAA,EAAK;AAAA,IACpB;AAEA,IAAA,IAAI,KAAK,UAAA,EAAY;AACnB,MAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AACnB,MAAA,CAAA,EAAA,GAAA,IAAA,CAAK,MAAA,KAAL,mBAAa,KAAA,CAAM,oDAAA,CAAA;AACnB,MAAA,OAAO,EAAE,IAAI,IAAA,EAAK;AAAA,IACpB;AAEA,IAAA,MAAM,OAAA,GAAU,KAAK,kBAAA,EAAmB;AACxC,IAAA,IAAA,CAAK,UAAA,GAAa,IAAA;AAClB,IAAA,IAAA,CAAK,eAAA,GAAkB,IAAI,eAAA,EAAgB;AAE3C,IAAA,MAAM,SAAA,GAAY,YAAY,GAAA,EAAI;AAElC,IAAA,IAAI;AACF,MAAA,CAAA,EAAA,GAAA,IAAA,CAAK,MAAA,KAAL,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAa,KAAA,CAAM,eAAA,EAAiB,EAAE,OAAA,EAAQ,CAAA;AAE9C,MAAA,MAAM,OAAA,GAAuB;AAAA,QAC3B,MAAA,EAAQ,KAAK,eAAA,CAAgB,MAAA;AAAA,QAC7B,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,QACpB,YAAY,IAAA,CAAK;AAAA,OACnB;AAEA,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,SAAA,CAAU,SAAS,OAAO,CAAA;AAEpD,MAAA,MAAM,QAAA,GAAW,WAAA,CAAY,GAAA,EAAI,GAAI,SAAA;AACrC,MAAA,CAAA,EAAA,GAAA,IAAA,CAAK,WAAL,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAa,KAAA,CAAM,gBAAA,EAAkB,EAAE,QAAQ,QAAA,EAAS,CAAA;AAExD,MAAA,IAAI,OAAO,EAAA,EAAI;AACb,QAAA,IAAA,CAAK,UAAA,GAAa,CAAA;AAAA,MACpB,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,aAAA,CAAc,OAAA,EAAS,MAAA,CAAO,KAAK,CAAA;AAAA,MAC1C;AAEA,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,QAAA,GAAW,WAAA,CAAY,GAAA,EAAI,GAAI,SAAA;AACrC,MAAA,MAAM,aAAA,GAAgB,aAAA,CAAc,WAAA,CAAY,KAAA,EAAO,iBAAiB,CAAA;AAExE,MAAA,CAAA,EAAA,GAAA,IAAA,CAAK,WAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,KAAA,CAAM,eAAe,aAAA,EAAe,EAAE,SAAS,QAAA,EAAS,CAAA;AACrE,MAAA,IAAA,CAAK,aAAA,CAAc,SAAS,aAAa,CAAA;AAEzC,MAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,aAAA,EAAc;AAAA,IAC3C,CAAA,SAAE;AACA,MAAA,IAAA,CAAK,UAAA,GAAa,KAAA;AAClB,MAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AAEvB,MAAA,IAAI,KAAK,WAAA,EAAa;AACpB,QAAA,IAAA,CAAK,WAAA,GAAc,KAAA;AAEnB,QAAA,KAAK,KAAK,KAAA,EAAM;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,KAAA,GAAc;AAnGhB,IAAA,IAAA,EAAA,EAAA,EAAA;AAoGI,IAAA,CAAA,EAAA,GAAA,IAAA,CAAK,MAAA,KAAL,mBAAa,KAAA,CAAM,mBAAA,CAAA;AACnB,IAAA,IAAA,CAAK,UAAU,EAAC;AAChB,IAAA,IAAA,CAAK,WAAA,GAAc,KAAA;AACnB,IAAA,CAAA,EAAA,GAAA,IAAA,CAAK,oBAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAsB,KAAA,EAAA;AAAA,EACxB;AAAA,EAEA,OAAA,GAAmB;AACjB,IAAA,OAAO,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,OAAO,EAAE,MAAA,KAAW,CAAA;AAAA,EAC9C;AAAA,EAEA,iBAAA,GAA2C;AACzC,IAAA,OAAO,EAAE,GAAG,IAAA,CAAK,OAAA,EAAQ;AAAA,EAC3B;AAAA,EAEQ,kBAAA,GAAkC;AACxC,IAAA,MAAM,UAAU,IAAA,CAAK,OAAA;AACrB,IAAA,IAAA,CAAK,UAAU,EAAC;AAChB,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEQ,aAAA,CAAc,SAAsB,KAAA,EAAoB;AAxHlE,IAAA,IAAA,EAAA,EAAA,EAAA;AA0HI,IAAA,MAAM,UAAA,GAA0B,EAAE,GAAG,OAAA,EAAQ;AAG7C,IAAA,MAAA,CAAO,KAAK,IAAA,CAAK,OAAO,CAAA,CAAE,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACzC,MAAA,UAAA,CAAW,GAAG,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AAAA,IACpC,CAAC,CAAA;AAED,IAAA,IAAA,CAAK,OAAA,GAAU,UAAA;AACf,IAAA,IAAA,CAAK,UAAA,EAAA;AAEL,IAAA,IAAI,IAAA,CAAK,UAAA,IAAc,IAAA,CAAK,UAAA,EAAY;AACtC,MAAA,CAAA,EAAA,GAAA,IAAA,CAAK,WAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,IAAA;AAAA,QACX,CAAA,yBAAA,EAA4B,IAAA,CAAK,UAAU,CAAA,CAAA,EAAI,KAAK,UAAU,CAAA,CAAA,CAAA;AAAA,QAC9D,EAAE,KAAA;AAAM,OAAA;AAAA,IAEZ,CAAA,MAAO;AACL,MAAA,CAAA,EAAA,GAAA,IAAA,CAAK,WAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,KAAA,CAAM,CAAA,kBAAA,EAAqB,IAAA,CAAK,UAAU,CAAA,QAAA,CAAA,EAAY,KAAA,CAAA;AAAA,IACrE;AAAA,EACF;AACF;;;AC3IO,IAAM,oBAAA,GAAsC;AAAA,EACjD,QAAA,EAAU,KAAA;AAAA,EACV,SAAA,EAAW,IAAA;AAAA,EACX,QAAA,EAAU,IAAA;AAAA,EACV,qBAAA,EAAuB,KAAA;AAAA,EACvB,QAAQ,EAAC;AAAA,EACT,OAAA,EAAS;AAAA,IACP,UAAA,EAAY,CAAA;AAAA,IACZ,eAAA,EAAiB,CAAA;AAAA,IACjB,WAAA,EAAa,CAAA;AAAA,IACb,eAAA,EAAiB;AAAA;AAErB;AAEO,SAAS,eAAA,CACd,OACA,MAAA,EACe;AACf,EAAA,QAAQ,OAAO,IAAA;AAAM,IACnB,KAAK,YAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,QAAA,EAAU,IAAA;AAAA,QACV,SAAA,EAAW;AAAA,OACb;AAAA,IAEF,KAAK,cAAA,EAAgB;AACnB,MAAA,MAAM,EAAE,UAAA,EAAY,eAAA,EAAgB,GAAI,KAAA,CAAM,OAAA;AAC9C,MAAA,MAAM,gBAAgB,UAAA,GAAa,CAAA;AACnC,MAAA,MAAM,kBAAA,GAAA,CACH,eAAA,GAAkB,UAAA,GAAa,MAAA,CAAO,QAAA,IAAY,aAAA;AAErD,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,QAAA,EAAU,KAAA;AAAA,QACV,SAAA,EAAW,IAAA;AAAA,QACX,OAAA,EAAS;AAAA,UACP,GAAG,KAAA,CAAM,OAAA;AAAA,UACT,UAAA,EAAY,aAAA;AAAA,UACZ,eAAA,EAAiB,KAAA,CAAM,OAAA,CAAQ,eAAA,GAAkB,CAAA;AAAA,UACjD,eAAA,EAAiB;AAAA;AACnB,OACF;AAAA,IACF;AAAA,IAEA,KAAK,YAAA,EAAc;AACjB,MAAA,MAAM,EAAE,UAAA,EAAY,eAAA,EAAgB,GAAI,KAAA,CAAM,OAAA;AAC9C,MAAA,MAAM,gBAAgB,UAAA,GAAa,CAAA;AACnC,MAAA,MAAM,kBAAA,GAAA,CACH,eAAA,GAAkB,UAAA,GAAa,MAAA,CAAO,QAAA,IAAY,aAAA;AAErD,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,QAAA,EAAU,KAAA;AAAA,QACV,WAAW,MAAA,CAAO,KAAA;AAAA,QAClB,OAAA,EAAS;AAAA,UACP,GAAG,KAAA,CAAM,OAAA;AAAA,UACT,UAAA,EAAY,aAAA;AAAA,UACZ,WAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,WAAA,GAAc,CAAA;AAAA,UACzC,eAAA,EAAiB;AAAA;AACnB,OACF;AAAA,IACF;AAAA,IAEA,KAAK,iBAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,UAAU,EAAE,GAAG,MAAM,QAAA,EAAU,GAAG,OAAO,QAAA;AAAS,OACpD;AAAA,IAEF,KAAK,qBAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,UAAU,MAAA,CAAO,QAAA;AAAA,QACjB,qBAAA,EAAuB;AAAA,OACzB;AAAA,IAEF,KAAK,gBAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,QAAA,EAAU,IAAA;AAAA,QACV,qBAAA,EAAuB;AAAA,OACzB;AAAA,IAEF,KAAK,OAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,QAAA,EAAU;AAAA,OACZ;AAAA,IAEF;AACE,MAAA,OAAO,KAAA;AAAA;AAEb;;;AC/FO,IAAM,kBAAN,MAAsB;AAAA,EAG3B,WAAA,CAA6B,UAAU,EAAA,EAAI;AAAd,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAF7B,IAAA,IAAA,CAAQ,KAAA,uBAAY,GAAA,EAAqB;AAAA,EAEG;AAAA,EAE5C,IAAI,GAAA,EAAkC;AACpC,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA;AAAA,EAC3B;AAAA,EAEA,GAAA,CAAI,KAAa,KAAA,EAAsB;AACrC,IAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,GAAA,EAAK,KAAK,CAAA;AACzB,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACf;AAAA,EAEA,KAAA,GAAc;AACZ,IAAA,IAAA,CAAK,MAAM,KAAA,EAAM;AAAA,EACnB;AAAA;AAAA,EAGA,IAAA,GAAe;AACb,IAAA,OAAO,KAAK,KAAA,CAAM,IAAA;AAAA,EACpB;AAAA;AAAA,EAGA,IAAI,GAAA,EAAsB;AACxB,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA;AAAA,EAC3B;AAAA;AAAA,EAGA,OAAO,GAAA,EAAsB;AAC3B,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,GAAG,CAAA;AAAA,EAC9B;AAAA;AAAA,EAGA,IAAA,GAAiB;AACf,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA;AAAA,EACrC;AAAA;AAAA,EAGA,OAAA,GAAoC;AAClC,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA;AAAA,EACxC;AAAA,EAEQ,OAAA,GAAgB;AACtB,IAAA,IAAI,IAAA,CAAK,KAAA,CAAM,IAAA,IAAQ,IAAA,CAAK,OAAA,EAAS;AAErC,IAAA,MAAM,UAAU,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA;AAC/C,IAAA,MAAM,WAAW,OAAA,CAAQ,KAAA,CAAM,GAAG,OAAA,CAAQ,MAAA,GAAS,KAAK,OAAO,CAAA;AAC/D,IAAA,QAAA,CAAS,OAAA,CAAQ,CAAC,CAAC,GAAG,MAAM,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,EACpD;AACF;;;AC1CO,IAAM,eAAN,MAAmB;AAAA,EAGxB,YACmB,OAAA,GAAU,GAAA,EACV,KAAA,GAAQ,CAAA,GAAI,KAAK,GAAA,EAClC;AAFiB,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AACA,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAJnB,IAAA,IAAA,CAAQ,KAAA,uBAAY,GAAA,EAAwB;AAAA,EAKzC;AAAA,EAEH,IAAI,GAAA,EAAgC;AAClC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA;AAChC,IAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AAEnB,IAAA,IAAI,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,EAAG;AACzB,MAAA,IAAA,CAAK,KAAA,CAAM,OAAO,GAAG,CAAA;AACrB,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,KAAA,CAAM,IAAA,EAAA;AACN,IAAA,OAAO,KAAA,CAAM,MAAA;AAAA,EACf;AAAA,EAEA,GAAA,CAAI,KAAa,MAAA,EAA0B;AACzC,IAAA,IAAA,CAAK,KAAA,CAAM,IAAI,GAAA,EAAK;AAAA,MAClB,MAAA;AAAA,MACA,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,MACpB,IAAA,EAAM;AAAA,KACP,CAAA;AAED,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACf;AAAA,EAEA,KAAA,GAAc;AACZ,IAAA,IAAA,CAAK,MAAM,KAAA,EAAM;AAAA,EACnB;AAAA,EAEA,IAAA,GAAe;AACb,IAAA,OAAO,KAAK,KAAA,CAAM,IAAA;AAAA,EACpB;AAAA;AAAA,EAGA,IAAI,GAAA,EAAsB;AACxB,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA;AAAA,EAC3B;AAAA;AAAA,EAGA,OAAO,GAAA,EAAsB;AAC3B,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,GAAG,CAAA;AAAA,EAC9B;AAAA;AAAA,EAGA,IAAA,GAAiB;AACf,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA;AAAA,EACrC;AAAA;AAAA,EAGA,OAAA,GAAuC;AACrC,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA;AAAA,EACxC;AAAA;AAAA,EAGA,QAAA,GAME;AACA,IAAA,MAAM,UAAU,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AAC9C,IAAA,MAAM,SAAA,GAAY,QAAQ,MAAA,CAAO,CAAC,KAAK,KAAA,KAAU,GAAA,GAAM,KAAA,CAAM,IAAA,EAAM,CAAC,CAAA;AACpE,IAAA,MAAM,aAAa,OAAA,CAAQ,GAAA,CAAI,CAAC,KAAA,KAAU,MAAM,SAAS,CAAA;AAEzD,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,KAAK,KAAA,CAAM,IAAA;AAAA,MACjB,SAAA;AAAA,MACA,aAAa,OAAA,CAAQ,MAAA,GAAS,CAAA,GAAI,SAAA,GAAY,QAAQ,MAAA,GAAS,CAAA;AAAA,MAC/D,WAAA,EAAa,WAAW,MAAA,GAAS,CAAA,GAAI,KAAK,GAAA,CAAI,GAAG,UAAU,CAAA,GAAI,CAAA;AAAA,MAC/D,WAAA,EAAa,WAAW,MAAA,GAAS,CAAA,GAAI,KAAK,GAAA,CAAI,GAAG,UAAU,CAAA,GAAI;AAAA,KACjE;AAAA,EACF;AAAA,EAEQ,UAAU,KAAA,EAA4B;AAC5C,IAAA,OAAO,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA,CAAM,YAAY,IAAA,CAAK,KAAA;AAAA,EAC7C;AAAA,EAEQ,OAAA,GAAgB;AACtB,IAAA,IAAI,IAAA,CAAK,KAAA,CAAM,IAAA,IAAQ,IAAA,CAAK,OAAA,EAAS;AAGrC,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,IAAA,CAAK,KAAA,CAAM,SAAQ,EAAG;AAC/C,MAAA,IAAI,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,EAAG;AACzB,QAAA,IAAA,CAAK,KAAA,CAAM,OAAO,GAAG,CAAA;AAAA,MACvB;AAAA,IACF;AAGA,IAAA,IAAI,IAAA,CAAK,KAAA,CAAM,IAAA,GAAO,IAAA,CAAK,OAAA,EAAS;AAClC,MAAA,MAAM,UAAU,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA;AAC/C,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,CAAC,CAAA,CAAE,SAAA,GAAY,CAAA,CAAE,CAAC,CAAA,CAAE,SAAS,CAAA;AAEtD,MAAA,MAAM,WAAW,OAAA,CAAQ,KAAA,CAAM,GAAG,OAAA,CAAQ,MAAA,GAAS,KAAK,OAAO,CAAA;AAC/D,MAAA,QAAA,CAAS,OAAA,CAAQ,CAAC,CAAC,GAAG,MAAM,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,IACpD;AAAA,EACF;AACF;;;ACpGO,IAAM,mBAAN,MAAuB;AAAA,EAC5B,WAAA,CAAoB,UAAmB,IAAA,EAAM;AAAzB,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAEpB,IAAA,IAAA,CAAQ,OAAA,GAA2B;AAAA,MACjC,UAAA,EAAY,CAAA;AAAA,MACZ,eAAA,EAAiB,CAAA;AAAA,MACjB,WAAA,EAAa,CAAA;AAAA,MACb,mBAAA,EAAqB,CAAA;AAAA,MACrB,eAAA,EAAiB,CAAA;AAAA,MACjB,SAAA,EAAW,CAAA;AAAA,MACX,WAAA,EAAa,CAAA;AAAA,MACb,UAAA,EAAY;AAAA,KACd;AAAA,EAX8C;AAAA,EAa9C,UAAA,CAAW,UAAkB,OAAA,EAAwB;AACnD,IAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AACnB,IAAA,IAAA,CAAK,OAAA,CAAQ,UAAA,EAAA;AACb,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,IAAA,CAAK,OAAA,CAAQ,eAAA,EAAA;AAAA,IACf,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,OAAA,CAAQ,WAAA,EAAA;AAAA,IACf;AAEA,IAAA,IAAA,CAAK,sBAAsB,QAAQ,CAAA;AAAA,EACrC;AAAA,EAEA,cAAA,GAAuB;AACrB,IAAA,IAAA,CAAK,OAAA,CAAQ,SAAA,EAAA;AAAA,EACf;AAAA,EAEA,eAAA,GAAwB;AACtB,IAAA,IAAA,CAAK,OAAA,CAAQ,WAAA,EAAA;AAAA,EACf;AAAA,EAEA,WAAA,GAAoB;AAClB,IAAA,IAAA,CAAK,OAAA,CAAQ,UAAA,EAAA;AAAA,EACf;AAAA,EAEA,eAAe,QAAA,EAAwB;AACrC,IAAA,IAAA,CAAK,0BAA0B,QAAQ,CAAA;AAAA,EACzC;AAAA,EAEA,UAAA,GAAwC;AACtC,IAAA,OAAO,EAAE,GAAG,IAAA,CAAK,OAAA,EAAQ;AAAA,EAC3B;AAAA,EAEA,cAAA,GAAyB;AACvB,IAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,UAAA,KAAe,CAAA,EAAG,OAAO,CAAA;AAC1C,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,eAAA,GAAkB,IAAA,CAAK,OAAA,CAAQ,UAAA;AAAA,EACrD;AAAA,EAEA,eAAA,GAA0B;AACxB,IAAA,MAAM,kBAAA,GACJ,IAAA,CAAK,OAAA,CAAQ,SAAA,GAAY,KAAK,OAAA,CAAQ,WAAA;AACxC,IAAA,IAAI,kBAAA,KAAuB,GAAG,OAAO,CAAA;AACrC,IAAA,OAAO,IAAA,CAAK,QAAQ,SAAA,GAAY,kBAAA;AAAA,EAClC;AAAA,EAEA,KAAA,GAAc;AACZ,IAAA,IAAA,CAAK,OAAA,GAAU;AAAA,MACb,UAAA,EAAY,CAAA;AAAA,MACZ,eAAA,EAAiB,CAAA;AAAA,MACjB,WAAA,EAAa,CAAA;AAAA,MACb,mBAAA,EAAqB,CAAA;AAAA,MACrB,eAAA,EAAiB,CAAA;AAAA,MACjB,SAAA,EAAW,CAAA;AAAA,MACX,WAAA,EAAa,CAAA;AAAA,MACb,UAAA,EAAY;AAAA,KACd;AAAA,EACF;AAAA,EAEQ,sBAAsB,QAAA,EAAwB;AACpD,IAAA,MAAM,KAAA,GAAQ,KAAK,OAAA,CAAQ,UAAA;AAC3B,IAAA,IAAA,CAAK,QAAQ,eAAA,GAAA,CACV,IAAA,CAAK,QAAQ,eAAA,IAAmB,KAAA,GAAQ,KAAK,QAAA,IAAY,KAAA;AAAA,EAC9D;AAAA,EAEQ,0BAA0B,QAAA,EAAwB;AAExD,IAAA,IAAA,CAAK,OAAA,CAAQ,mBAAA,GAAA,CACV,IAAA,CAAK,OAAA,CAAQ,sBAAsB,QAAA,IAAY,CAAA;AAAA,EACpD;AACF;;;ACtFO,IAAM,gBAAN,MAAsC;AAAA,EAC3C,WAAA,CACmB,SAAA,EACA,OAAA,GAAU,IAAA,EAC3B;AAFiB,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAAA,EAChB;AAAA,EAEH,KAAA,CAAM,SAAiB,IAAA,EAAkB;AAb3C,IAAA,IAAA,EAAA;AAcI,IAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AACnB,IAAA,MAAM,GAAA,GAAA,CAAM,EAAA,GAAA,OAAA,CAAQ,KAAA,KAAR,IAAA,GAAA,EAAA,GAAiB,OAAA,CAAQ,GAAA;AACrC,IAAA,GAAA,CAAI,aAAa,IAAA,CAAK,SAAS,KAAK,OAAA,EAAS,IAAA,GAAO,OAAO,EAAE,CAAA;AAAA,EAC/D;AAAA,EAEA,IAAA,CAAK,SAAiB,IAAA,EAAkB;AACtC,IAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AACnB,IAAA,OAAA,CAAQ,IAAA,CAAK,aAAa,IAAA,CAAK,SAAS,KAAK,OAAA,EAAS,IAAA,GAAO,OAAO,EAAE,CAAA;AAAA,EACxE;AAAA,EAEA,IAAA,CAAK,SAAiB,IAAA,EAAkB;AACtC,IAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AACnB,IAAA,OAAA,CAAQ,IAAA,CAAK,aAAa,IAAA,CAAK,SAAS,KAAK,OAAA,EAAS,IAAA,GAAO,OAAO,EAAE,CAAA;AAAA,EACxE;AAAA,EAEA,KAAA,CAAM,OAAA,EAAiB,KAAA,EAAe,IAAA,EAAkB;AACtD,IAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AACnB,IAAA,OAAA,CAAQ,KAAA;AAAA,MACN,CAAA,UAAA,EAAa,KAAK,SAAS,CAAA,CAAA,CAAA;AAAA,MAC3B,OAAA;AAAA,MACA,KAAA;AAAA,MACA,OAAO,IAAA,GAAO;AAAA,KAChB;AAAA,EACF;AACF,CAAA;AAEO,SAAS,YAAA,CAAa,SAAA,EAAmB,OAAA,GAAU,KAAA,EAAe;AAEvE,EAAA,OAAO,IAAI,aAAA,CAAc,SAAA,EAAW,OAAO,CAAA;AAC7C;;;ACvCO,SAAS,WAAA,CACd,QACA,KAAA,EACY;AACZ,EAAA,MAAM,SAAqB,EAAC;AAE5B,EAAA,MAAA,CAAO,KAAK,KAAA,IAAA,IAAA,GAAA,KAAA,GAAS,EAAE,CAAA,CAAE,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACxC,IAAA,MAAM,UAAA,GAAa,MAAM,GAAG,CAAA;AAE5B,IAAA,IAAI,eAAe,IAAA,EAAM;AAEvB,MAAC,MAAA,CAAe,GAAG,CAAA,GAAI,MAAA,CAAO,GAAG,CAAA;AAAA,IACnC,CAAA,MAAA,IAAW,OAAO,UAAA,KAAe,QAAA,IAAY,eAAe,IAAA,EAAM;AAEhE,MAAA,MAAM,eAAe,WAAA,CAAY,MAAA,CAAO,GAAG,CAAA,IAAK,IAAI,UAAU,CAAA;AAC9D,MAAA,IAAI,MAAA,CAAO,IAAA,CAAK,YAAY,CAAA,CAAE,SAAS,CAAA,EAAG;AACxC,QAAC,MAAA,CAAe,GAAG,CAAA,GAAI,YAAA;AAAA,MACzB;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AAED,EAAA,OAAO,MAAA;AACT;;;ACpBO,SAAS,WAAW,OAAA,EAAmC;AAC5D,EAAA,MAAM,MAAmB,EAAC;AAC1B,EAAA,KAAA,MAAW,CAAA,IAAK,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,EAAG;AACpC,IAAA,MAAM,CAAA,GAAK,QAAgB,CAAC,CAAA;AAC5B,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,CAAA,YAAa,IAAA,GAAQ,CAAA,CAAE,aAAY,GAAY,CAAA;AAAA,EAC1D;AACA,EAAA,OAAO,GAAA;AACT;AAEO,SAAS,0BAAA,CACd,uBAAA,EACA,OAAA,EACA,WAAA,EACA,SAAA,EACA;AACA,EAAA,MAAM,MAAA,GAAS,aAAa,eAAe,CAAA;AAC3C,EAAA,OAAO,CAAC,QAAW,KAAA,KAAe;AAChC,IAAA,MAAA,CAAO,MAAM,wBAAA,EAA0B;AAAA,MACrC,MAAA;AAAA,MACA,KAAA;AAAA,MACA,QAAQ,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW;AAAA,KACpB,CAAA;AAED,IAAA,MAAM,cAAA,GAAiB,wBAAwB,KAAK,CAAA;AACpD,IAAA,MAAA,CAAO,KAAA,CAAM,oCAAoC,cAAc,CAAA;AAE/D,IAAA,MAAM,MAAA,GAAS,WAAA,CAAY,MAAA,EAAe,cAAc,CAAA;AACxD,IAAA,MAAA,CAAO,KAAA,CAAM,sCAAsC,MAAM,CAAA;AAIzD,IAAA,MAAA,CAAO,KAAA,CAAM,iCAAiC,MAAM,CAAA;AACpD,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AACF;AAEO,SAAS,uBAAA,CACd,uBAAA,EACA,WAAA,EACA,SAAA,EACA;AACA,EAAA,OAAO,CAAC,EAAE,WAAA,EAAa,MAAA,EAAO,KAAW;AACvC,IAAA,MAAM,oBAAA,GAAuB,wBAAwB,WAAW,CAAA;AAChE,IAAA,IAAI,OAAO,IAAA,CAAK,oBAAoB,CAAA,CAAE,MAAA,GAAS,GAAG,OAAO,IAAA;AAEzD,IAAA,IAAA,CACE,WAAA,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAa,aACb,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,OAAA,CAAA,KACV,UAAU,OAAA,KAAY,MAAA,IAAU,SAAA,CAAU,OAAA,KAAY,MAAA,CAAA,EACvD;AACA,MAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,EAAG;AACrC,QAAA,IAAI,CAAC,UAAW,MAAA,CAAe,GAAG,GAAG,WAAA,CAAY,OAAA,CAAQ,GAAG,CAAC,CAAA,EAAG;AAC9D,UAAA,OAAO,IAAA;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AACF;AAEO,SAAS,gCAAA,CACd,WAAA,EACA,SAAA,EACA,qBAAA,EACA;AACA,EAAA,OAAO,CAAC,YAAA,KAAsB;AAC5B,IAAA,MAAM,SAAA,GAAY,EAAE,GAAG,YAAA,EAAa;AAiBpC,IAAA,OAAO,SAAA;AAAA,EACT,CAAA;AACF;AAwBA,SAAS,SAAA,CAAU,GAAQ,CAAA,EAAiB;AAC1C,EAAA,IAAI,MAAA,CAAO,EAAA,CAAG,CAAA,EAAG,CAAC,GAAG,OAAO,IAAA;AAC5B,EAAA,IAAI,CAAA,YAAa,IAAA,IAAQ,CAAA,YAAa,IAAA,EAAM;AAC1C,IAAA,OAAO,CAAA,CAAE,OAAA,EAAQ,KAAM,CAAA,CAAE,OAAA,EAAQ;AAAA,EACnC;AACA,EAAA,IAAI,OAAO,CAAA,KAAM,OAAO,CAAA,EAAG,OAAO,KAAA;AAClC,EAAA,IAAI,MAAM,OAAA,CAAQ,CAAC,KAAK,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAG;AACxC,IAAA,IAAI,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,MAAA,EAAQ,OAAO,KAAA;AAClC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,QAAQ,CAAA,EAAA,EAAK;AACjC,MAAA,IAAI,CAAC,UAAU,CAAA,CAAE,CAAC,GAAG,CAAA,CAAE,CAAC,CAAC,CAAA,EAAG,OAAO,KAAA;AAAA,IACrC;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IACE,CAAA,KAAM,QACN,OAAO,CAAA,KAAM,YACb,CAAA,KAAM,IAAA,IACN,OAAO,CAAA,KAAM,QAAA,EACb;AACA,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA;AACxB,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA;AACxB,IAAA,IAAI,EAAA,CAAG,MAAA,KAAW,EAAA,CAAG,MAAA,EAAQ,OAAO,KAAA;AACpC,IAAA,KAAA,MAAW,KAAK,EAAA,EAAI;AAClB,MAAA,IAAI,CAAC,UAAU,CAAA,CAAE,CAAC,GAAI,CAAA,CAAU,CAAC,CAAC,CAAA,EAAG,OAAO,KAAA;AAAA,IAC9C;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA;AACT;;;AC3IO,SAAS,OAAA,CACd,SACA,MAAA,EACqB;AACrB,EAAA,MAAM,SAA8B,EAAC;AAErC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AAClD,IAAA,MAAM,OAAA,GAAU,OAAO,GAAG,CAAA;AAE1B,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA;AACd,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,MAAA,MAAA,CAAO,OAAO,CAAA,GAAI,KAAA;AAAA,IACpB,CAAA,MAAO;AACL,MAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,OAAA;AAC5B,MAAA,MAAA,CAAO,MAAM,CAAA,GAAI,SAAA,GAAY,SAAA,CAAU,KAAK,CAAA,GAAI,KAAA;AAAA,IAClD;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,gBAAgB,MAAA,EAAgB;AAC9C,EAAA,OAAO,CAAC,OAAA,KAAiC,OAAA,CAAQ,OAAA,EAAS,MAAM,CAAA;AAClE;;;ACCO,SAAS,uBAAA,CAAwB;AAAA,EACtC,aAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,qBAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,oBAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA,EAAsC;AACpC,EAAA,OAAO,OAAO,SAAsB,GAAA,KAAsB;AArD5D,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAsDI,IAAA,MAAM,KAAA,GAAQ,YAAY,GAAA,EAAI;AAC9B,IAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAW,EAAE,MAAM,YAAA,EAAa,CAAA;AAEhC,IAAA,IAAI;AACF,MAAA,IAAI,gBAAA,GAAmB,EAAE,GAAG,OAAA,EAAQ;AACpC,MAAA,MAAM,yBAAmC,EAAC;AAC1C,MAAA,MAAM,sBAAgC,EAAC;AACvC,MAAA,MAAM,sBAKD,EAAC;AAGN,MAAA,MAAM,gBAAA,uBAAuB,GAAA,EAAmB;AAGhD,MAAA,IAAI,WAAW,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,SAAS,CAAA,EAAG;AAC9C,QAAA,KAAA,MAAW,CAAC,GAAA,EAAK,OAAO,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AACpD,UAAA,IAAI,EAAE,OAAO,OAAA,CAAA,EAAU;AAEvB,UAAA,MAAM,IAAA,GAAA,CAAA,CAAO,EAAA,GAAA,WAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,WAAA,CAAa,OAAA,KAAb,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAuB,SAAQ,EAAC;AAC7C,UAAA,MAAM,IAAA,GAAQ,OAAA,CAAgB,GAAG,CAAA,IAAK,EAAC;AAEvC,UAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,IAAI,KAAK,CAAC,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AAGlD,UAAA,gBAAA,CAAiB,GAAA,CAAI,GAAA,EAAK,CAAC,GAAG,IAAI,CAAC,CAAA;AAEnC,UAAA,MAAM,UAAU,IAAI,GAAA,CAAI,KAAK,GAAA,CAAI,OAAA,CAAQ,IAAI,CAAC,CAAA;AAC9C,UAAA,MAAM,UAAU,IAAI,GAAA,CAAI,KAAK,GAAA,CAAI,OAAA,CAAQ,IAAI,CAAC,CAAA;AAE9C,UAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAW,CAAC,OAAA,CAAQ,GAAA,CAAI,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAC,CAAC,CAAA;AACnE,UAAA,MAAM,UAAU,IAAA,CAAK,MAAA;AAAA,YACnB,CAAC,MAAW,CAAC,OAAA,CAAQ,IAAI,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAC;AAAA,WAC1C;AAEA,UAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,KAAA,CAAM,CAAA,YAAA,EAAe,GAAG,CAAA,CAAA,EAAI;AAAA,YAClC,QAAA,EAAU,IAAA,CAAK,GAAA,CAAI,OAAA,CAAQ,IAAI,CAAA;AAAA,YAC/B,OAAA,EAAS,IAAA,CAAK,GAAA,CAAI,OAAA,CAAQ,IAAI,CAAA;AAAA,YAC9B,KAAA,EAAO,KAAA,CAAM,GAAA,CAAI,OAAA,CAAQ,IAAI,CAAA;AAAA,YAC7B,OAAA,EAAS,OAAA,CAAQ,GAAA,CAAI,OAAA,CAAQ,IAAI;AAAA,WACnC,CAAA;AAGA,UAAA,IAAI,SAAA,GAAY,KAAA;AAGhB,UAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,YAAA,IAAI;AACF,cAAA,MAAM,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAC,CAAA;AACzC,cAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,KAAA;AAAA,gBACN,8BAA8B,GAAG,CAAA,CAAA,CAAA;AAAA,gBACjC,OAAA,CAAQ,KAAK,IAAI;AAAA,eAAA;AAAA,YAErB,SAAS,KAAA,EAAO;AACd,cAAA,SAAA,GAAY,IAAA;AACZ,cAAA,MAAM,GAAA,GACJ,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AAE1D,cAAA,mBAAA,CAAoB,IAAA,CAAK;AAAA,gBACvB,KAAA,EAAO,GAAA;AAAA,gBACP,SAAA,EAAW,KAAA;AAAA,gBACX,KAAA,EAAO,GAAA;AAAA,gBACP,MAAA,EAAQ,OAAA,CAAQ,IAAA,CAAK,IAAI;AAAA,eAC1B,CAAA;AAED,cAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,KAAA,CAAM,CAAA,sBAAA,EAAyB,GAAG,CAAA,CAAA,CAAA,EAAK,GAAA,EAAK;AAAA,gBAClD,IAAA,EAAM,OAAA,CAAQ,IAAA,CAAK,IAAI;AAAA,eACzB,CAAA;AAAA,YACF;AAAA,UACF;AAGA,UAAA,KAAA,MAAW,QAAQ,OAAA,EAAS;AAC1B,YAAA,IAAI;AACF,cAAA,MAAM,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAC,CAAA;AAC5C,cAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,KAAA;AAAA,gBACN,kCAAkC,GAAG,CAAA,CAAA,CAAA;AAAA,gBACrC,OAAA,CAAQ,KAAK,IAAI;AAAA,eAAA;AAAA,YAErB,SAAS,KAAA,EAAO;AACd,cAAA,SAAA,GAAY,IAAA;AACZ,cAAA,MAAM,GAAA,GACJ,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AAE1D,cAAA,mBAAA,CAAoB,IAAA,CAAK;AAAA,gBACvB,KAAA,EAAO,GAAA;AAAA,gBACP,SAAA,EAAW,QAAA;AAAA,gBACX,KAAA,EAAO,GAAA;AAAA,gBACP,MAAA,EAAQ,OAAA,CAAQ,IAAA,CAAK,IAAI;AAAA,eAC1B,CAAA;AAED,cAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,KAAA,CAAM,CAAA,2BAAA,EAA8B,GAAG,CAAA,CAAA,CAAA,EAAK,GAAA,EAAK;AAAA,gBACvD,IAAA,EAAM,OAAA,CAAQ,IAAA,CAAK,IAAI;AAAA,eACzB,CAAA;AAAA,YACF;AAAA,UACF;AAIA,UAAA,IAAI,SAAA,EAAW;AACb,YAAA,mBAAA,CAAoB,KAAK,GAAG,CAAA;AAC5B,YAAA,OAAQ,iBAAyB,GAAG,CAAA;AACpC,YAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,IAAA;AAAA,cACN,uCAAuC,GAAG,CAAA,uCAAA;AAAA,aAAA;AAAA,UAE9C,CAAA,MAAO;AACL,YAAA,sBAAA,CAAuB,KAAK,GAAG,CAAA;AAC/B,YAAA,OAAQ,iBAAyB,GAAG,CAAA;AACpC,YAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,KAAA;AAAA,cACN,0CAA0C,GAAG,CAAA,sBAAA;AAAA,aAAA;AAAA,UAEjD;AAAA,QACF;AAAA,MACF;AAGA,MAAA,IACE,mBAAA,CAAoB,SAAS,CAAA,IAC7B,MAAA,CAAO,KAAK,gBAAgB,CAAA,CAAE,WAAW,CAAA,EACzC;AACA,QAAA,MAAM,gBAAgB,IAAI,KAAA;AAAA,UACxB,8BAA8B,mBAAA,CAC3B,GAAA;AAAA,YACC,CAAC,MAAA,KACC,CAAA,EAAG,MAAA,CAAO,KAAK,CAAA,CAAA,EAAI,MAAA,CAAO,SAAS,CAAA,CAAA,EAAI,MAAA,CAAO,MAAM,CAAA,GAAA,EAAM,MAAA,CAAO,MAAM,OAAO,CAAA;AAAA,WAClF,CACC,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,SACf;AAEA,QAAA,MAAMA,SAAAA,GAAW,WAAA,CAAY,GAAA,EAAI,GAAI,KAAA;AACrC,QAAA,QAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,QAAA,CAAW,EAAE,IAAA,EAAM,YAAA,EAAc,KAAA,EAAO,aAAA,EAAe,UAAAA,SAAAA,EAAS,CAAA;AAChE,QAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAS,WAAWA,SAAAA,EAAU,KAAA,CAAA;AAG9B,QAAA,IAAI,IAAA,IAAQ,mBAAA,CAAoB,MAAA,GAAS,CAAA,EAAG;AAC1C,UAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,MAAM,8CAAA,EAAgD;AAAA,YAC5D,YAAA,EAAc;AAAA,WAChB,CAAA;AAGA,UAAA,oBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,oBAAA,EAAA;AAGA,UAAA,IAAI,SAAA,EAAW;AACb,YAAA,SAAA,CAAU,OAAA,GAAU,QAAA;AAAA,UACtB;AACA,UAAA,IAAI,cAAA,EAAgB;AAClB,YAAA,cAAA,CAAe,OAAA,GAAU,IAAA;AAAA,UAC3B;AAGA,UAAA,mBAAA,CAAoB,OAAA,CAAQ,CAAC,KAAA,KAAU;AACrC,YAAA,IAAI;AACF,cAAA,MAAM,UAAU,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAU,KAAA,CAAA;AAC1B,cAAA,IAAI,CAAC,OAAA,EAAS;AAEd,cAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,GAAA,CAAI,KAAK,CAAA;AAChD,cAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,aAAa,CAAA,EAAG;AAEnC,cAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,KAAA,CAAM,CAAA,UAAA,EAAa,KAAK,CAAA,YAAA,CAAA,EAAgB;AAAA,gBAC9C,QAAA,EAAU,aAAA,CAAc,GAAA,CAAI,OAAA,CAAQ,IAAI;AAAA,eAC1C,CAAA;AAEA,cAAA,IAAA,CAAK,QAAA,CAAS,KAAA,EAAc,CAAC,GAAG,aAAa,CAAA,EAAG;AAAA,gBAC9C,WAAA,EAAa,KAAA;AAAA,gBACb,WAAA,EAAa,KAAA;AAAA,gBACb,cAAA,EAAgB;AAAA,eACjB,CAAA;AAAA,YACH,SAAS,CAAA,EAAG;AACV,cAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,KAAA;AAAA,gBACN,0BAA0B,KAAK,CAAA,CAAA;AAAA,gBAC/B,aAAa,KAAA,GAAQ,CAAA,GAAI,IAAI,KAAA,CAAM,MAAA,CAAO,CAAC,CAAC;AAAA,eAAA;AAAA,YAEhD;AAAA,UACF,CAAC,CAAA;AAGD,UAAA,IAAI,WAAA,KAAe,yCAAY,OAAA,CAAA,EAAS;AACtC,YAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,OAAA,CAAQ,QAAA,EAAS;AAC1C,YAAA,IAAI,KAAA,CAAM,OAAO,CAAA,EAAG;AAClB,cAAA,UAAA,CAAW,QAAQ,mBAAA,EAAoB;AAAA,YACzC;AAAA,UACF;AAGA,UAAA,MAAM,kBAA+B,EAAC;AACtC,UAAA,mBAAA,CAAoB,OAAA,CAAQ,CAAC,KAAA,KAAU;AACrC,YAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,GAAA,CAAI,KAAK,CAAA;AAChD,YAAA,IAAI,aAAA,EAAe;AACjB,cAAA,eAAA,CAAgB,KAAK,CAAA,GAAI,aAAA;AAAA,YAC3B;AAAA,UACF,CAAC,CAAA;AACD,UAAA,IAAI,MAAA,CAAO,IAAA,CAAK,eAAe,CAAA,CAAE,SAAS,CAAA,EAAG;AAC3C,YAAA,cAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAiB,eAAA,CAAA;AACjB,YAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,MAAM,kDAAA,EAAoD;AAAA,cAChE;AAAA,aACF,CAAA;AAAA,UACF;AAGA,UAAA,IAAI,oBAAA,EAAsB;AACxB,YAAA,MAAM,aAAA,GAAgB,KAAK,SAAA,EAAU;AACrC,YAAA,oBAAA,CAAqB,aAAa,CAAA;AAAA,UACpC;AAGA,UAAA,UAAA,CAAW,MAAM;AACf,YAAA,IAAI,SAAA,YAAqB,OAAA,GAAU,IAAA;AACnC,YAAA,IAAI,cAAA,iBAA+B,OAAA,GAAU,KAAA;AAAA,UAC/C,GAAG,GAAG,CAAA;AAAA,QACR;AAEA,QAAA,MAAM,aAAA,GAAgB;AAAA,UACpB,EAAA,EAAI,KAAA;AAAA,UACJ,KAAA,EAAO,aAAA;AAAA,UACP,YAAA,EAAc,mBAAA;AAAA,UACd,aAAA,EAAe;AAAA,SACjB;AACA,QAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAU,aAAA,EAAe,OAAA,CAAA;AACzB,QAAA,OAAO,aAAA;AAAA,MACT;AAGA,MAAA,IAAI,YAAA,GAAe,gBAAA;AACnB,MAAA,IAAI,MAAA;AACF,QAAA,YAAA,GAAe,OAAA,CAAQ,cAAqB,MAAM,CAAA;AACpD,MAAA,IAAI,UAAA;AACF,QAAA,YAAA,GAAe,WAAW,YAAmB,CAAA;AAC/C,MAAA,YAAA,GAAe,WAAW,YAAY,CAAA;AAGtC,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI,MAAA,CAAO,IAAA,CAAK,YAAY,CAAA,CAAE,SAAS,CAAA,EAAG;AACxC,QAAA,MAAA,GAAS,MAAM,aAAA,CAAc,YAAA,EAAc,GAAG,CAAA;AAI9C,QAAA,IAAI,CAAC,MAAA,CAAO,EAAA,IAAM,sBAAA,CAAuB,SAAS,CAAA,EAAG;AACnD,UAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,IAAA;AAAA,YACN,wDAAA;AAAA,YACA;AAAA,cACE,gBAAA,EAAkB,MAAA,CAAO,IAAA,CAAK,YAAY,CAAA;AAAA,cAC1C,sBAAA,EAAwB;AAAA;AAC1B,WAAA;AAAA,QAEJ;AAAA,MACF,CAAA,MAAO;AAGL,QAAA,IAAI,mBAAA,CAAoB,SAAS,CAAA,EAAG;AAClC,UAAA,MAAM,gBAAgB,IAAI,KAAA;AAAA,YACxB,8BAA8B,mBAAA,CAC3B,GAAA;AAAA,cACC,CAAC,MAAA,KACC,CAAA,EAAG,MAAA,CAAO,KAAK,CAAA,CAAA,EAAI,MAAA,CAAO,SAAS,CAAA,CAAA,EAAI,MAAA,CAAO,MAAM,CAAA,GAAA,EAAM,MAAA,CAAO,MAAM,OAAO,CAAA;AAAA,aAClF,CACC,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,WACf;AACA,UAAA,MAAA,GAAS;AAAA,YACP,EAAA,EAAI,KAAA;AAAA,YACJ,KAAA,EAAO,aAAA;AAAA,YACP,YAAA,EAAc,mBAAA;AAAA,YACd,aAAA,EAAe;AAAA,WACjB;AAAA,QACF,CAAA,MAAO;AACL,UAAA,MAAA,GAAS,EAAE,IAAI,IAAA,EAAK;AAAA,QACtB;AAAA,MACF;AAGA,MAAA,IAAI,MAAA,CAAO,EAAA,IAAM,mBAAA,CAAoB,MAAA,GAAS,CAAA,EAAG;AAC/C,QAAA,MAAM,gBAAgB,IAAI,KAAA;AAAA,UACxB,qDAAqD,mBAAA,CAClD,GAAA;AAAA,YACC,CAAC,MAAA,KACC,CAAA,EAAG,MAAA,CAAO,KAAK,CAAA,CAAA,EAAI,MAAA,CAAO,SAAS,CAAA,CAAA,EAAI,MAAA,CAAO,MAAM,CAAA,GAAA,EAAM,MAAA,CAAO,MAAM,OAAO,CAAA;AAAA,WAClF,CACC,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,SACf;AACA,QAAA,MAAA,GAAS;AAAA,UACP,EAAA,EAAI,KAAA;AAAA,UACJ,KAAA,EAAO,aAAA;AAAA,UACP,YAAA,EAAc,mBAAA;AAAA,UACd,aAAA,EAAe;AAAA,SACjB;AACA,QAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,KAAK,wDAAA,EAA0D;AAAA,UACrE,mBAAA,EAAqB,MAAA,CAAO,IAAA,CAAK,YAAY,CAAA;AAAA,UAC7C,mBAAA;AAAA,UACA,QAAQ,mBAAA,CAAoB,GAAA;AAAA,YAC1B,CAAC,CAAA,KAAM,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,CAAA,EAAI,CAAA,CAAE,SAAS,CAAA,CAAA,EAAI,CAAA,CAAE,MAAM,CAAA,GAAA,EAAM,CAAA,CAAE,MAAM,OAAO,CAAA;AAAA;AACnE,SACF,CAAA;AAAA,MACF;AAEA,MAAA,MAAM,QAAA,GAAW,WAAA,CAAY,GAAA,EAAI,GAAI,KAAA;AAErC,MAAA,IAAI,OAAO,EAAA,EAAI;AACb,QAAA,QAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,QAAA,CAAW,EAAE,IAAA,EAAM,cAAA,EAAgB,QAAA,EAAS,CAAA;AAG5C,QAAA,MAAM,iBAAA,GAAoB,EAAE,GAAG,OAAA,EAAQ;AAEvC,QAAA,mBAAA,CAAoB,OAAA,CAAQ,CAAC,KAAA,KAAU;AACrC,UAAA,OAAQ,kBAA0B,KAAK,CAAA;AAAA,QACzC,CAAC,CAAA;AAED,QAAA,cAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAiB,iBAAA,CAAA;AACjB,QAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAS,WAAW,QAAA,EAAU,IAAA,CAAA;AAG9B,QAAA,IAAI,SAAA,YAAqB,OAAA,GAAU,IAAA;AACnC,QAAA,IAAI,qBAAA,EAAuB,qBAAA,CAAsB,OAAA,CAAQ,KAAA,EAAM;AAG/D,QAAA,IAAI,IAAA,EAAM;AACR,UAAA,MAAM,aAAA,GAAgB,KAAK,SAAA,EAAU;AAGrC,UAAA,IAAI,oBAAA,EAAsB;AACxB,YAAA,oBAAA,CAAqB,aAAa,CAAA;AAAA,UACpC;AAIA,UAAA,MAAM,YAAA,GAAe;AAAA,YACnB,UAAA,EAAY,IAAA;AAAA,YACZ,SAAA,EAAW,oBAAoB,MAAA,GAAS,CAAA;AAAA;AAAA,YACxC,eAAA,EAAiB,KAAA;AAAA,YACjB,WAAA,EAAa,IAAA;AAAA,YACb,UAAA,EAAY,KAAA;AAAA,YACZ,eAAA,EAAiB,IAAA;AAAA,YACjB,eAAA,EAAiB;AAAA,WACnB;AAEA,UAAA,IAAA,CAAK,KAAA,CAAM,eAAe,YAAY,CAAA;AAGtC,UAAA,IAAI,mBAAA,CAAoB,SAAS,CAAA,EAAG;AAClC,YAAA,mBAAA,CAAoB,OAAA,CAAQ,CAAC,KAAA,KAAU;AACrC,cAAA,IAAI;AACF,gBAAA,IAAA,CAAK,QAAA,CAAS,KAAA,EAAO,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,EAAG;AAAA,kBAC1C,WAAA,EAAa;AAAA,iBACd,CAAA;AAAA,cACH,SAAS,CAAA,EAAG;AACV,gBAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,IAAA;AAAA,kBACN,+BAA+B,KAAK,CAAA,SAAA,CAAA;AAAA,kBACpC;AAAA,iBAAA;AAAA,cAEJ;AAAA,YACF,CAAC,CAAA;AAAA,UACH;AAEA,UAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,MAAM,uBAAA,EAAyB;AAAA,YACrC,aAAA,EAAe,MAAA,CAAO,IAAA,CAAK,YAAY,CAAA;AAAA,YACvC,sBAAA,EAAwB,sBAAA;AAAA,YACxB,mBAAA;AAAA,YACA;AAAA,WACF,CAAA;AAAA,QACF;AAGA,QAAA,IAAI,WAAA,KAAe,yCAAY,OAAA,CAAA,EAAS;AACtC,UAAA,UAAA,CAAW,QAAQ,cAAA,EAAe;AAClC,UAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,MAAM,yCAAA,EAA2C;AAAA,YACvD,eAAA,EAAA,CAAiB,EAAA,GAAA,CAAA,EAAA,GAAA,UAAA,CAAW,OAAA,EAAQ,QAAA,KAAnB,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA;AAAA,WACnB,CAAA;AAAA,QACF;AAEA,QAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAU,MAAA,EAAQ,OAAA,CAAA;AAAA,MACpB,CAAA,MAAO;AAEL,QAAA,QAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,QAAA,CAAW,EAAE,IAAA,EAAM,YAAA,EAAc,KAAA,EAAO,MAAA,CAAO,OAAO,QAAA,EAAS,CAAA;AAC/D,QAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAS,WAAW,QAAA,EAAU,KAAA,CAAA;AAG9B,QAAA,IAAI,IAAA,IAAQ,mBAAA,CAAoB,MAAA,GAAS,CAAA,EAAG;AAC1C,UAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,MAAM,qCAAA,EAAuC;AAAA,YACnD,YAAA,EAAc;AAAA,WAChB,CAAA;AAGA,UAAA,oBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,oBAAA,EAAA;AAGA,UAAA,IAAI,SAAA,EAAW;AACb,YAAA,SAAA,CAAU,OAAA,GAAU,QAAA;AAAA,UACtB;AACA,UAAA,IAAI,cAAA,EAAgB;AAClB,YAAA,cAAA,CAAe,OAAA,GAAU,IAAA;AAAA,UAC3B;AAGA,UAAA,MAAM,aAAA,uBAAoB,GAAA,EAOxB;AAEF,UAAA,mBAAA,CAAoB,OAAA,CAAQ,CAAC,MAAA,KAAW;AACtC,YAAA,IAAI,CAAC,aAAA,CAAc,GAAA,CAAI,MAAA,CAAO,KAAK,CAAA,EAAG;AACpC,cAAA,aAAA,CAAc,GAAA,CAAI,MAAA,CAAO,KAAA,EAAO,EAAE,CAAA;AAAA,YACpC;AACA,YAAA,aAAA,CAAc,GAAA,CAAI,MAAA,CAAO,KAAK,CAAA,CAAG,IAAA,CAAK;AAAA,cACpC,WAAW,MAAA,CAAO,SAAA;AAAA,cAClB,QAAQ,MAAA,CAAO,MAAA;AAAA,cACf,OAAO,MAAA,CAAO;AAAA,aACf,CAAA;AAAA,UACH,CAAC,CAAA;AAGD,UAAA,MAAM,kBAA+B,EAAC;AAGtC,UAAA,aAAA,CAAc,OAAA,CAAQ,CAAC,MAAA,EAAQ,KAAA,KAAU;AACvC,YAAA,IAAI;AACF,cAAA,MAAM,UAAU,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAU,KAAA,CAAA;AAC1B,cAAA,IAAI,CAAC,OAAA,EAAS;AACZ,gBAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,IAAA,CAAK,gCAAgC,KAAK,CAAA,CAAA,CAAA;AAClD,gBAAA;AAAA,cACF;AAEA,cAAA,MAAM,YAAA,GAAe,IAAA,CAAK,SAAA,CAAU,KAAY,CAAA;AAChD,cAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,GAAA,CAAI,KAAK,CAAA;AAEhD,cAAA,IACE,CAAC,MAAM,OAAA,CAAQ,YAAY,KAC3B,CAAC,KAAA,CAAM,OAAA,CAAQ,aAAa,CAAA,EAC5B;AACA,gBAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,IAAA,CAAK,SAAS,KAAK,CAAA,+BAAA,CAAA,CAAA;AAC3B,gBAAA;AAAA,cACF;AAIA,cAAA,MAAM,aAAA,GAAgB,CAAC,GAAG,aAAa,CAAA;AAEvC,cAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,KAAA,CAAM,CAAA,SAAA,EAAY,KAAK,CAAA,4BAAA,CAAA,EAAgC;AAAA,gBAC7D,QAAA,EAAU,aAAA,CAAc,GAAA,CAAI,OAAA,CAAQ,IAAI,CAAA;AAAA,gBACxC,OAAA,EAAS,YAAA,CAAa,GAAA,CAAI,OAAA,CAAQ,IAAI,CAAA;AAAA,gBACtC,QAAA,EAAU,aAAA,CAAc,GAAA,CAAI,OAAA,CAAQ,IAAI,CAAA;AAAA,gBACxC,MAAA,EAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,EAAG,CAAA,CAAE,SAAS,CAAA,CAAA,EAAI,CAAA,CAAE,MAAM,CAAA,CAAA,CAAG;AAAA,eACzD,CAAA;AAGA,cAAA,eAAA,CAAgB,KAAK,CAAA,GAAI,aAAA;AAGzB,cAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,KAAA,CAAM,CAAA,2BAAA,EAA8B,KAAK,CAAA,CAAA,EAAI;AAAA,gBACnD,MAAA,EAAQ,aAAa,GAAA,CAAI,CAAC,SAAS,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,gBACrD,KAAA,EAAO,cAAc,GAAA,CAAI,CAAC,SAAS,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC;AAAA,eACvD,CAAA;AAEA,cAAA,IAAA,CAAK,QAAA,CAAS,OAAc,aAAA,EAAe;AAAA,gBACzC,WAAA,EAAa,KAAA;AAAA;AAAA,gBACb,WAAA,EAAa,KAAA;AAAA,gBACb,cAAA,EAAgB;AAAA,eACjB,CAAA;AAAA,YACH,SAAS,CAAA,EAAG;AACV,cAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,KAAA;AAAA,gBACN,0BAA0B,KAAK,CAAA,CAAA;AAAA,gBAC/B,aAAa,KAAA,GAAQ,CAAA,GAAI,IAAI,KAAA,CAAM,MAAA,CAAO,CAAC,CAAC;AAAA,eAAA;AAAA,YAEhD;AAAA,UACF,CAAC,CAAA;AAGD,UAAA,IAAI,MAAA,CAAO,IAAA,CAAK,eAAe,CAAA,CAAE,SAAS,CAAA,EAAG;AAC3C,YAAA,cAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAiB,eAAA,CAAA;AACjB,YAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,MAAM,kDAAA,EAAoD;AAAA,cAChE;AAAA,aACF,CAAA;AAAA,UACF;AAGA,UAAA,IAAI,WAAA,KAAe,yCAAY,OAAA,CAAA,EAAS;AACtC,YAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,OAAA,CAAQ,QAAA,EAAS;AAC1C,YAAA,IAAI,KAAA,CAAM,OAAO,CAAA,EAAG;AAClB,cAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,MAAM,0CAAA,EAA4C;AAAA,gBACxD,WAAA,EAAa;AAAA,eACf,CAAA;AAEA,cAAA,UAAA,CAAW,QAAQ,mBAAA,EAAoB;AAEvC,cAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,MAAM,yCAAA,EAA2C;AAAA,gBACvD,UAAA,EAAY,UAAA,CAAW,OAAA,CAAQ,QAAA;AAAS,eAC1C,CAAA;AAAA,YACF;AAAA,UACF;AAGA,UAAA,IAAI,wBAAwB,IAAA,EAAM;AAChC,YAAA,MAAM,aAAA,GAAgB,KAAK,SAAA,EAAU;AACrC,YAAA,oBAAA,CAAqB,aAAa,CAAA;AAClC,YAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,KAAA,CAAM,uCAAA,CAAA;AAAA,UAChB;AAGA,UAAA,UAAA,CAAW,MAAM;AACf,YAAA,IAAI,SAAA,EAAW;AACb,cAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AAAA,YACtB;AACA,YAAA,IAAI,cAAA,EAAgB;AAClB,cAAA,cAAA,CAAe,OAAA,GAAU,KAAA;AAAA,YAC3B;AAAA,UACF,GAAG,GAAG,CAAA;AAAA,QACR;AAEA,QAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAU,MAAA,EAAQ,OAAA,CAAA;AAAA,MACpB;AAEA,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,CAAA,EAAG;AACV,MAAA,MAAM,QAAA,GAAW,WAAA,CAAY,GAAA,EAAI,GAAI,KAAA;AACrC,MAAA,MAAM,GAAA,GAAM,aAAa,KAAA,GAAQ,CAAA,GAAI,IAAI,KAAA,CAAM,MAAA,CAAO,CAAC,CAAC,CAAA;AACxD,MAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAW,EAAE,IAAA,EAAM,YAAA,EAAc,KAAA,EAAO,KAAK,QAAA,EAAS,CAAA;AACtD,MAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,WAAW,QAAA,EAAU,KAAA,CAAA;AAC9B,MAAA,MAAM,aAAA,GAAgB,EAAE,EAAA,EAAI,KAAA,EAAO,OAAO,GAAA,EAAI;AAC9C,MAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAU,aAAA,EAAe,OAAA,CAAA;AACzB,MAAA,OAAO,aAAA;AAAA,IACT;AAAA,EACF,CAAA;AACF;;;ACjkBA,SAAS,SAAS,CAAA,EAAiB;AACjC,EAAA,OAAO,CAAA,KAAM,IAAA,IAAQ,OAAO,CAAA,KAAM,QAAA;AACpC;AAEO,SAASC,UAAAA,CAAU,GAAQ,CAAA,EAAiB;AACjD,EAAA,IAAI,MAAA,CAAO,EAAA,CAAG,CAAA,EAAG,CAAC,GAAG,OAAO,IAAA;AAE5B,EAAA,IAAI,CAAA,YAAa,IAAA,IAAQ,CAAA,YAAa,IAAA,EAAM;AAC1C,IAAA,OAAO,CAAA,CAAE,OAAA,EAAQ,KAAM,CAAA,CAAE,OAAA,EAAQ;AAAA,EACnC;AAEA,EAAA,IAAI,OAAO,CAAA,KAAM,OAAO,CAAA,EAAG,OAAO,KAAA;AAElC,EAAA,IAAI,MAAM,OAAA,CAAQ,CAAC,KAAK,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAG;AACxC,IAAA,IAAI,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,MAAA,EAAQ,OAAO,KAAA;AAElC,IAAA,MAAM,OAAA,GACJ,CAAA,CAAE,MAAA,GAAS,CAAA,IAAK,EAAE,CAAC,CAAA,IAAK,OAAO,CAAA,CAAE,CAAC,CAAA,KAAM,QAAA,IAAY,IAAA,IAAQ,EAAE,CAAC,CAAA;AACjE,IAAA,MAAM,OAAA,GACJ,CAAA,CAAE,MAAA,GAAS,CAAA,IAAK,EAAE,CAAC,CAAA,IAAK,OAAO,CAAA,CAAE,CAAC,CAAA,KAAM,QAAA,IAAY,IAAA,IAAQ,EAAE,CAAC,CAAA;AAEjE,IAAA,IAAI,WAAW,OAAA,EAAS;AACtB,MAAA,MAAM,IAAA,GAAO,EAAE,GAAA,CAAI,CAAC,SAAc,IAAA,CAAK,EAAE,EAAE,IAAA,EAAK;AAChD,MAAA,MAAM,IAAA,GAAO,EAAE,GAAA,CAAI,CAAC,SAAc,IAAA,CAAK,EAAE,EAAE,IAAA,EAAK;AAChD,MAAA,OAAO,KAAK,SAAA,CAAU,IAAI,CAAA,KAAM,IAAA,CAAK,UAAU,IAAI,CAAA;AAAA,IACrD;AAEA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,QAAQ,CAAA,EAAA,EAAK;AACjC,MAAA,IAAI,CAACA,WAAU,CAAA,CAAE,CAAC,GAAG,CAAA,CAAE,CAAC,CAAC,CAAA,EAAG,OAAO,KAAA;AAAA,IACrC;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,QAAA,CAAS,CAAC,CAAA,IAAK,QAAA,CAAS,CAAC,CAAA,EAAG;AAC9B,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA;AACxB,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA;AACxB,IAAA,IAAI,EAAA,CAAG,MAAA,KAAW,EAAA,CAAG,MAAA,EAAQ,OAAO,KAAA;AACpC,IAAA,KAAA,MAAW,KAAK,EAAA,EAAI;AAClB,MAAA,IAAI,CAACA,WAAU,CAAA,CAAE,CAAC,GAAI,CAAA,CAAU,CAAC,CAAC,CAAA,EAAG,OAAO,KAAA;AAAA,IAC9C;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,aAAA,CAAc,IAAA,EAAW,IAAA,EAAW,QAAA,GAAW,EAAA,EAAa;AAC1E,EAAA,IAAIA,UAAAA,CAAU,IAAA,EAAM,IAAI,CAAA,SAAU,EAAC;AAEnC,EAAA,IAAI,MAAM,OAAA,CAAQ,IAAI,KAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AAC9C,IAAA,OAAO;AAAA,MACL;AAAA,QACE,IAAA,EAAM,QAAA;AAAA,QACN,SAAA,EAAW,IAAA;AAAA,QACX,SAAA,EAAW,IAAA;AAAA,QACX,SAAA,EAAW,QAAA,CAAS,QAAA,CAAS,GAAG,CAAA,GAAI,SAAS,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,GAAI;AAAA;AAC/D,KACF;AAAA,EACF;AAEA,EAAA,MAAM,SAAA,GACJ,QAAA,CAAS,IAAI,CAAA,IAAK,CAAC,MAAM,OAAA,CAAQ,IAAI,CAAA,IAAK,EAAE,IAAA,YAAgB,IAAA,CAAA;AAC9D,EAAA,MAAM,SAAA,GACJ,QAAA,CAAS,IAAI,CAAA,IAAK,CAAC,MAAM,OAAA,CAAQ,IAAI,CAAA,IAAK,EAAE,IAAA,YAAgB,IAAA,CAAA;AAE9D,EAAA,IAAI,CAAC,SAAA,IAAa,CAAC,SAAA,EAAW;AAC5B,IAAA,OAAO;AAAA,MACL;AAAA,QACE,IAAA,EAAM,QAAA;AAAA,QACN,SAAA,EAAW,IAAA;AAAA,QACX,SAAA,EAAW,IAAA;AAAA,QACX,SAAA,EAAW,QAAA,CAAS,QAAA,CAAS,GAAG,CAAA,GAAI,SAAS,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,GAAI;AAAA;AAC/D,KACF;AAAA,EACF;AAEA,EAAA,MAAM,UAAmB,EAAC;AAC1B,EAAA,MAAM,IAAA,uBAAW,GAAA,CAAY;AAAA,IAC3B,GAAG,MAAA,CAAO,IAAA,CAAK,IAAA,IAAA,IAAA,GAAA,IAAA,GAAQ,EAAE,CAAA;AAAA,IACzB,GAAG,MAAA,CAAO,IAAA,CAAK,IAAA,IAAA,IAAA,GAAA,IAAA,GAAQ,EAAE;AAAA,GAC1B,CAAA;AACD,EAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,IAAA,MAAM,YAAY,QAAA,GAAW,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,GAAK,CAAA;AAClD,IAAA,MAAM,CAAA,GAAA,CAAK,IAAA,IAAA,IAAA,GAAA,IAAA,GAAQ,EAAC,EAAG,CAAC,CAAA;AACxB,IAAA,MAAM,CAAA,GAAA,CAAK,IAAA,IAAA,IAAA,GAAA,IAAA,GAAQ,EAAC,EAAG,CAAC,CAAA;AAExB,IAAA,IAAI,CAACA,UAAAA,CAAU,CAAA,EAAG,CAAC,CAAA,EAAG;AACpB,MAAA,IAAI,MAAM,OAAA,CAAQ,CAAC,KAAK,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAG;AACxC,QAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,UACX,IAAA,EAAM,SAAA;AAAA,UACN,SAAA,EAAW,CAAA;AAAA,UACX,SAAA,EAAW,CAAA;AAAA,UACX,SAAA,EAAW,SAAA,CAAU,QAAA,CAAS,GAAG,CAAA,GAC7B,UAAU,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,GACtB;AAAA,SACL,CAAA;AAAA,MACH,CAAA,MAAA,IAAW,CAAA,YAAa,IAAA,IAAQ,CAAA,YAAa,IAAA,EAAM;AACjD,QAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,UACX,IAAA,EAAM,SAAA;AAAA,UACN,SAAA,EAAW,CAAA;AAAA,UACX,SAAA,EAAW,CAAA;AAAA,UACX,SAAA,EAAW,SAAA,CAAU,QAAA,CAAS,GAAG,CAAA,GAC7B,UAAU,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,GACtB;AAAA,SACL,CAAA;AAAA,MACH,WAAW,QAAA,CAAS,CAAC,CAAA,IAAK,QAAA,CAAS,CAAC,CAAA,EAAG;AACrC,QAAA,OAAA,CAAQ,KAAK,GAAG,aAAA,CAAc,CAAA,EAAG,CAAA,EAAG,SAAS,CAAC,CAAA;AAAA,MAChD,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,UACX,IAAA,EAAM,SAAA;AAAA,UACN,SAAA,EAAW,CAAA;AAAA,UACX,SAAA,EAAW,CAAA;AAAA,UACX,SAAA,EAAW,SAAA,CAAU,QAAA,CAAS,GAAG,CAAA,GAC7B,UAAU,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,GACtB;AAAA,SACL,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;AAEO,SAAS,gBAAgB,GAAA,EAAkC;AAChE,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,GAAG,EAAE,IAAA,EAAK;AACnC,EAAA,MAAM,MAA2B,EAAC;AAClC,EAAA,KAAA,MAAW,KAAK,IAAA,EAAM,GAAA,CAAI,CAAC,CAAA,GAAI,IAAI,CAAC,CAAA;AACpC,EAAA,OAAO,IAAA,CAAK,UAAU,GAAG,CAAA;AAC3B;AAEO,SAAS,kBAAkB,EAAA,EAA6B;AAC7D,EAAA,IAAI,CAAC,EAAA,IAAM,CAAE,EAAA,CAAmB,SAAS,OAAO,KAAA;AAChD,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,IAAI,IAAA,CAAK,mBAAmB,OAAO,IAAA;AACnC,EAAA,MAAM,MAAM,IAAA,CAAK,OAAA;AACjB,EAAA,IAAI,QAAQ,OAAA,IAAW,GAAA,KAAQ,UAAA,IAAc,GAAA,KAAQ,UAAU,OAAO,IAAA;AAEtE,EAAA,IAAI,KAAK,YAAA,IAAgB,IAAA,CAAK,aAAa,MAAM,CAAA,KAAM,WAAW,OAAO,IAAA;AACzE,EAAA,OAAO,KAAA;AACT;;;ACtIO,SAAS,WAAA,CACd,IAAA,EACA,OAAA,EACA,WAAA,EACA,KAAA,EACA;AACA,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,UAAA,EAAY,KAAK,CAAA;AAC7C,EAAA,MAAM,WAAA,GAAcC,aAAmC,IAAI,CAAA;AAC3D,EAAA,MAAM,wBAAA,GAA2BA,aAAgB,KAAK,CAAA;AAEtD,EAAA,MAAM,cAAA,GAAiBC,iBAAA,CAAY,CAAC,IAAA,KAAuB;AACzD,IAAA,IAAI,CAAC,WAAA,CAAY,OAAA,EAAS,OAAO,KAAA;AACjC,IAAA,MAAM,IAAA,uBAAW,GAAA,CAAI;AAAA,MACnB,GAAG,MAAA,CAAO,IAAA,CAAK,IAAA,IAAQ,EAAE,CAAA;AAAA,MACzB,GAAG,MAAA,CAAO,IAAA,CAAK,WAAA,CAAY,OAAA,IAAW,EAAE;AAAA,KACzC,CAAA;AACD,IAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,MAAA,IAAI,CAACF,UAAAA,CAAU,IAAA,CAAK,CAAC,CAAA,EAAI,YAAY,OAAA,CAAgB,CAAC,CAAC,CAAA,EAAG,OAAO,KAAA;AAAA,IACnE;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,kBAAA,GAAqBE,iBAAA;AAAA,IACzB,CAAC,MAAA,KAAgC;AAC/B,MAAA,MAAA,CAAO,KAAA,CAAM,+CAA+C,MAAM,CAAA;AAClE,MAAA,WAAA,CAAY,OAAA,GAAU,EAAE,GAAG,MAAA,EAAO;AAClC,MAAA,wBAAA,CAAyB,OAAA,GAAU,IAAA;AAAA,IACrC,CAAA;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AAEA,EAAA,MAAM,cAAA,GAAiBA,iBAAA;AAAA,IACrB,CAAC,OAAA,KAA+B;AAC9B,MAAA,IAAI,CAAC,YAAY,OAAA,EAAS;AAC1B,MAAA,MAAM,YAAA,GAAe,EAAE,GAAG,WAAA,CAAY,OAAA,EAAQ;AAC9C,MAAA,KAAA,MAAW,CAAA,IAAK,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,EAAG;AACpC,QAAC,YAAA,CAAqB,CAAC,CAAA,GAAK,OAAA,CAAgB,CAAC,CAAA;AAAA,MAC/C;AACA,MAAA,WAAA,CAAY,OAAA,GAAU,YAAA;AACtB,MAAA,MAAA,CAAO,KAAA,CAAM,kCAAkC,YAAY,CAAA;AAAA,IAC7D,CAAA;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AAEA,EAAA,MAAM,aAAA,GAAgBA,kBAAY,MAAM;AACtC,IAAA,WAAA,CAAY,OAAA,GAAU,IAAA;AACtB,IAAA,wBAAA,CAAyB,OAAA,GAAU,KAAA;AAAA,EACrC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,mBAAA,GAAsBA,kBAAY,MAAM;AAC5C,IAAA,MAAM,aAAA,GAAgB,KAAK,SAAA,EAAU;AACrC,IAAA,WAAA,CAAY,OAAA,GAAU,EAAE,GAAG,aAAA,EAAc;AACzC,IAAA,wBAAA,CAAyB,OAAA,GAAU,IAAA;AACnC,IAAA,MAAA,CAAO,KAAA,CAAM,0BAA0B,aAAa,CAAA;AAAA,EACtD,CAAA,EAAG,CAAC,IAAA,EAAM,MAAM,CAAC,CAAA;AAEjB,EAAA,MAAM,cAAcA,iBAAA,CAAY,MAAM,WAAA,CAAY,OAAA,EAAS,EAAE,CAAA;AAE7D,EAAA,MAAM,qBAAA,GAAwBA,iBAAA;AAAA,IAC5B,MAAM,wBAAA,CAAyB,OAAA;AAAA,IAC/B;AAAC,GACH;AAEA,EAAA,MAAM,wBAAA,GAA2BA,iBAAA;AAAA,IAC/B,CAAC,OAAA,KAAqB;AACpB,MAAA,OAAA,CACG,OAAA,IAAW,WAAA,KACZ,CAAC,OAAA,IACD,CAAC,wBAAA,CAAyB,OAAA;AAAA,IAE9B,CAAA;AAAA,IACA,CAAC,SAAS,WAAW;AAAA,GACvB;AAEA,EAAA,MAAM,mBAAA,GAAsBA,iBAAA;AAAA,IAC1B,CAAC,SAAkB,WAAA,KAAqB;AACtC,MAAA,OAAO,CAAC,OAAA,IAAW,MAAA,CAAO,IAAA,CAAK,WAAW,EAAE,MAAA,KAAW,CAAA;AAAA,IACzD,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,OAAO;AAAA;AAAA,IAEL,WAAA;AAAA,IACA,wBAAA;AAAA;AAAA,IAGA,cAAA;AAAA,IACA,kBAAA;AAAA,IACA,cAAA;AAAA,IACA,aAAA;AAAA,IACA,mBAAA;AAAA,IACA,WAAA;AAAA,IACA,qBAAA;AAAA;AAAA,IAGA,wBAAA;AAAA,IACA;AAAA,GACF;AACF;;;ACxGO,IAAM,sBAAN,MAA0B;AAAA,EAO/B,WAAA,CACU,QAAA,EAKA,gBAAA,EACA,gBAAA,EAIA,UAAA,EACR;AAXQ,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAKA,IAAA,IAAA,CAAA,gBAAA,GAAA,gBAAA;AACA,IAAA,IAAA,CAAA,gBAAA,GAAA,gBAAA;AAIA,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAjBV,IAAA,IAAA,CAAQ,OAAuB,EAAC;AAChC,IAAA,IAAA,CAAQ,SAAyB,EAAC;AAClC,IAAA,IAAA,CAAQ,SAAA,uBAAgB,GAAA,EAAgB;AACxC,IAAA,IAAA,CAAQ,MAAA,GAA0C,IAAA;AAClD,IAAA,IAAA,CAAQ,cAAwB,EAAC;AAAA,EAc9B;AAAA,EAEH,UAAU,QAAA,EAAkC;AAC1C,IAAA,IAAA,CAAK,SAAA,CAAU,IAAI,QAAQ,CAAA;AAC3B,IAAA,OAAO,MAAM;AACX,MAAA,IAAA,CAAK,SAAA,CAAU,OAAO,QAAQ,CAAA;AAAA,IAChC,CAAA;AAAA,EACF;AAAA,EAEQ,MAAA,GAAe;AACrB,IAAA,KAAA,MAAW,CAAA,IAAK,IAAA,CAAK,SAAA,EAAW,CAAA,EAAE;AAAA,EACpC;AAAA,EAEA,OAAO,KAAA,EAA2B;AAChC,IAAA,IAAI,CAAC,MAAM,MAAA,EAAQ;AAGnB,IAAA,IAAA,CAAK,IAAA,CAAK,KAAK,KAAK,CAAA;AAGpB,IAAA,IAAI,KAAK,UAAA,IAAc,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,KAAK,UAAA,EAAY;AACzD,MAAA,IAAA,CAAK,KAAK,KAAA,EAAM;AAEhB,MAAA,IAAA,CAAK,WAAA,GAAc,IAAA,CAAK,WAAA,CACrB,GAAA,CAAI,CAAC,EAAA,KAAO,EAAA,GAAK,CAAC,CAAA,CAClB,MAAA,CAAO,CAAC,EAAA,KAAO,MAAM,CAAC,CAAA;AAAA,IAC3B;AAKA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,MAAA,EAAO;AAAA,EACd;AAAA;AAAA,EAGA,WAAA,GAAoB;AAClB,IAAA,IAAI,IAAA,CAAK,OAAO,MAAA,EAAQ;AACtB,MAAA,IAAA,CAAK,SAAS,EAAC;AACf,MAAA,IAAA,CAAK,MAAA,EAAO;AAAA,IACd;AAAA,EACF;AAAA,EAEA,IAAA,GAAgB;AAjElB,IAAA,IAAA,EAAA;AAkEI,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,GAAA,EAAI;AAC5B,IAAA,IAAI,CAAC,OAAO,OAAO,KAAA;AAGnB,IAAA,MAAM,aAAA,GAAgB,KAAK,gBAAA,EAAiB;AAG5C,IAAA,MAAM,SAAA,GAA0B,KAAA,CAAM,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,MACpD,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,WAAW,KAAA,CAAM,SAAA;AAAA;AAAA,MACjB,SAAA,EACE,aAAA,CAAc,KAAA,CAAM,IAAI,CAAA,KAAM,SAC1B,aAAA,CAAc,KAAA,CAAM,IAAI,CAAA,GACxB,KAAA,CAAM,SAAA;AAAA;AAAA,MACZ,WAAW,KAAA,CAAM;AAAA,KACnB,CAAE,CAAA;AAGF,IAAA,IAAA,CAAK,MAAA,CAAO,KAAK,SAAS,CAAA;AAG1B,IAAA,KAAA,MAAW,EAAE,IAAA,EAAM,SAAA,EAAU,IAAK,KAAA,EAAO;AACvC,MAAA,IAAA,CAAK,QAAA,CAAS,IAAA,EAAM,SAAA,EAAW,IAAI,CAAA;AAAA,IACrC;AAEA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,CAAA,EAAA,GAAA,IAAA,CAAK,gBAAA,KAAL,8BAAwB,KAAA,EAAO,MAAA,CAAA;AAC/B,IAAA,IAAA,CAAK,MAAA,EAAO;AACZ,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,IAAA,GAAgB;AAjGlB,IAAA,IAAA,EAAA;AAkGI,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,GAAA,EAAI;AAC9B,IAAA,IAAI,CAAC,OAAO,OAAO,KAAA;AAGnB,IAAA,MAAM,aAAA,GAAgB,KAAK,gBAAA,EAAiB;AAG5C,IAAA,MAAM,SAAA,GAA0B,KAAA,CAAM,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,MACpD,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,SAAA,EACE,aAAA,CAAc,KAAA,CAAM,IAAI,CAAA,KAAM,SAC1B,aAAA,CAAc,KAAA,CAAM,IAAI,CAAA,GACxB,KAAA,CAAM,SAAA;AAAA;AAAA,MACZ,WAAW,KAAA,CAAM,SAAA;AAAA;AAAA,MACjB,WAAW,KAAA,CAAM;AAAA,KACnB,CAAE,CAAA;AAGF,IAAA,IAAA,CAAK,IAAA,CAAK,KAAK,SAAS,CAAA;AAGxB,IAAA,KAAA,MAAW,EAAE,IAAA,EAAM,SAAA,EAAU,IAAK,KAAA,EAAO;AACvC,MAAA,IAAA,CAAK,QAAA,CAAS,IAAA,EAAM,SAAA,EAAW,IAAI,CAAA;AAAA,IACrC;AAEA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,CAAA,EAAA,GAAA,IAAA,CAAK,gBAAA,KAAL,8BAAwB,KAAA,EAAO,MAAA,CAAA;AAC/B,IAAA,IAAA,CAAK,MAAA,EAAO;AACZ,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAGA,mBAAA,GAA+B;AAC7B,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,GAAA,EAAI;AAC5B,IAAA,IAAI,CAAC,OAAO,OAAO,KAAA;AAEnB,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,IAAA,IAAA,CAAK,MAAA,EAAO;AACZ,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,cAAA,GAAuB;AACrB,IAAA,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,MAAM,CAAA;AAAA,EACxC;AAAA,EAEA,oBAAA,GAAgC;AAC9B,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,WAAA,CAAY,GAAA,EAAI;AACpC,IAAA,IAAI,WAAW,MAAA,EAAW;AAExB,MAAA,OAAA,CAAQ,MAAM,wDAAwD,CAAA;AACtE,MAAA,IAAIC,eAAAA,GAAiB,KAAA;AACrB,MAAA,OAAO,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG;AAC3B,QAAA,IAAI,CAAC,IAAA,CAAK,IAAA,EAAK,EAAG;AAClB,QAAAA,eAAAA,GAAiB,IAAA;AAAA,MACnB;AACA,MAAA,OAAOA,eAAAA;AAAA,IACT;AAGA,IAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,gDAAA,EAAmD,MAAM,CAAA,CAAE,CAAA;AACzE,IAAA,IAAI,cAAA,GAAiB,KAAA;AACrB,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,MAAA,EAAQ;AAChC,MAAA,IAAI,CAAC,IAAA,CAAK,IAAA,EAAK,EAAG;AAClB,MAAA,cAAA,GAAiB,IAAA;AAAA,IACnB;AACA,IAAA,OAAO,cAAA;AAAA,EACT;AAAA,EAEA,OAAA,GAAmB;AACjB,IAAA,OAAO,IAAA,CAAK,KAAK,MAAA,GAAS,CAAA;AAAA,EAC5B;AAAA,EAEA,OAAA,GAAmB;AACjB,IAAA,OAAO,IAAA,CAAK,OAAO,MAAA,GAAS,CAAA;AAAA,EAC9B;AAAA,EAEA,SAAA,GAA6C;AAC3C,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA,EAEA,KAAA,GAAc;AACZ,IAAA,IAAA,CAAK,OAAO,EAAC;AACb,IAAA,IAAA,CAAK,SAAS,EAAC;AACf,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,IAAA,IAAA,CAAK,cAAc,EAAC;AACpB,IAAA,IAAA,CAAK,MAAA,EAAO;AAAA,EACd;AAAA;AAAA,EAGA,QAAA,GAAoE;AAClE,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,KAAK,IAAA,CAAK,MAAA;AAAA,MAChB,MAAA,EAAQ,KAAK,MAAA,CAAO,MAAA;AAAA,MACpB,WAAA,EAAa,CAAC,GAAG,IAAA,CAAK,WAAW;AAAA,KACnC;AAAA,EACF;AACF,CAAA;;;AC3KO,SAAS,WAAA,CACd,MACA,WAAA,EACA,gBAAA,EACA,gBACA,aAAA,EACA,UAAA,EAMA,OACA,MAAA,EACA;AArCF,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAsCE,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,WAAA,EAAa,KAAK,CAAA;AAE9C,EAAA,MAAM,WAAA,GAAc,CAAC,EAAC,WAAA,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAa,OAAA,CAAA;AACnC,EAAA,MAAM,cAAA,GAAiB,WAAA,KAAA,CAAgB,EAAA,GAAA,WAAA,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAa,OAAA,KAAb,IAAA,GAAA,EAAA,GAAwB,IAAA,CAAA;AAC/D,EAAA,MAAM,eAAA,GAAA,CAAkB,EAAA,GAAA,WAAA,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAa,eAAA,KAAb,IAAA,GAAA,EAAA,GAAgC,KAAA;AACxD,EAAA,MAAM,gBACJ,EAAA,GAAA,WAAA,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAa,MAAA,KAAb,YACC,OAAO,QAAA,KAAa,cAAc,QAAA,GAAY,MAAA;AAGjD,EAAA,MAAM,aAAA,GAAgB,KAAK,SAAA,EAAU;AACrC,EAAA,MAAM,aAAA,GAAgBF,aAAY,aAAa,CAAA;AAC/C,EAAA,MAAM,iBAAA,GAAoBA,aAAe,IAAI,CAAA;AAC7C,EAAA,MAAM,UAAA,GAAaA,aAAmC,IAAI,CAAA;AAC1D,EAAA,MAAM,SAAA,GAAYA,aAAe,IAAI,CAAA;AACrC,EAAA,MAAM,qBAAA,GAAwBA,YAAAA,iBAAoB,IAAI,GAAA,EAAK,CAAA;AAC3D,EAAA,MAAM,cAAA,GAAiBA,aAAO,KAAK,CAAA;AAEnC,EAAA,MAAM,wBAAA,GAA2BA,YAAAA,CAAe,eAAA,CAAgB,aAAoB,CAAC,CAAA;AACrF,EAAA,MAAM,iBAAA,GAAoBA,aAAO,KAAK,CAAA;AACtC,EAAA,MAAM,iBAAA,GAAoBA,aAAO,KAAK,CAAA;AAGtC,EAAA,MAAM,CAAC,mBAAmB,eAAe,CAAA,GAAIG,iBAAW,CAAC,CAAA,KAAM,CAAA,GAAI,CAAA,EAAG,CAAC,CAAA;AAEvE,EAAA,MAAM,MAAA,GAAS,KAAK,KAAA,EAAM;AAG1B,EAAA,MAAM,0BAAA,GAA6BF,iBAAAA;AAAA,IACjC,CAAC,QAAa,EAAA,KAAwB;AACpC,MAAA,MAAA,CAAO,KAAA;AAAA,QACL,oBAAoB,EAAE,CAAA,oDAAA;AAAA,OACxB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AAGA,EAAA,MAAM,gBAAA,GAAmBA,kBAAY,MAAM;AACzC,IAAA,MAAM,aAAA,GAAgB,KAAK,SAAA,EAAU;AAErC,IAAA,MAAM,YAAiC,EAAC;AAExC,IAAA,MAAM,OAAA,GAAU,CAAC,GAAA,EAAU,MAAA,GAAS,EAAA,KAAO;AACzC,MAAA,KAAA,MAAW,OAAO,GAAA,EAAK;AACrB,QAAA,MAAM,UAAU,MAAA,GAAS,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,GAAK,GAAA;AAC9C,QAAA,IACE,GAAA,CAAI,GAAG,CAAA,KAAM,IAAA,IACb,OAAO,GAAA,CAAI,GAAG,MAAM,QAAA,IACpB,CAAC,MAAM,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAC,CAAA,IACvB,EAAE,GAAA,CAAI,GAAG,aAAa,IAAA,CAAA,EACtB;AACA,UAAA,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA,EAAG,OAAO,CAAA;AAAA,QAC3B,CAAA,MAAO;AACL,UAAA,SAAA,CAAU,OAAO,CAAA,GAAI,GAAA,CAAI,GAAG,CAAA;AAAA,QAC9B;AAAA,MACF;AAAA,IACF,CAAA;AAEA,IAAA,OAAA,CAAQ,aAAa,CAAA;AACrB,IAAA,OAAO,SAAA;AAAA,EACT,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAGT,EAAAG,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,WAAA,EAAa;AAClB,IAAA,IAAI,WAAW,OAAA,EAAS;AAExB,IAAA,MAAM,MAAA,GAAS,CAAC,IAAA,EAAc,KAAA,KAAmB;AA1GrD,MAAA,IAAAC,KAAAC,GAAAA,EAAAC,GAAAA;AA4GM,MAAA,iBAAA,CAAkB,OAAA,GAAA,CAAUF,GAAAA,GAAA,SAAA,CAAU,OAAA,KAAV,OAAAA,GAAAA,GAAqB,MAAA;AAEjD,MAAA,qBAAA,CAAsB,OAAA,CAAQ,IAAI,IAAI,CAAA;AACtC,MAAA,IAAI,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG;AACtB,QAAA,qBAAA,CAAsB,QAAQ,GAAA,CAAI,IAAA,CAAK,MAAM,GAAG,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA,MACtD;AAEA,MAAA,CAACC,MAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAc,QAAA,KAAd,gBAAAA,GAAAA,CAAA,IAAA,CAAA,IAAA,EAAyB,MAAM,KAAA,EAAO;AAAA,QACrC,WAAA,EAAa,IAAA;AAAA,QACb,WAAA,EAAa,IAAA;AAAA,QACb,cAAA,EAAgB;AAAA,OAClB,CAAA;AAEA,MAAA,IACE,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,IACnB,MAAM,MAAA,GAAS,CAAA,IAAA,CAAA,CACdC,GAAAA,GAAA,KAAA,CAAc,CAAC,CAAA,KAAf,IAAA,GAAA,MAAA,GAAAA,GAAAA,CAAkB,QAAO,MAAA,EAC1B;AACA,QAAA,UAAA,CAAW,MAAG;AA9HtB,UAAA,IAAAF,GAAAA;AA8H0B,UAAA,OAAA,CAAAA,GAAAA,GAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAc,OAAA,KAAd,IAAA,GAAA,MAAA,GAAAA,IAAA,IAAA,CAAA,IAAA,EAAwB,IAAA,CAAA;AAAA,QAAA,CAAA,EAAO,CAAC,CAAA;AAAA,MACpD;AAAA,IACF,CAAA;AAEA,IAAA,UAAA,CAAW,UAAU,IAAI,mBAAA;AAAA,MACvB,MAAA;AAAA,MACA,gBAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,GAAG,CAAC,WAAA,EAAa,0BAAA,EAA4B,IAAA,EAAM,gBAAgB,CAAC,CAAA;AAGpE,EAAAD,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,WAAA,EAAa;AAClB,IAAA,IAAI,CAAC,WAAW,OAAA,EAAS;AACzB,IAAA,MAAM,QAAQ,UAAA,CAAW,OAAA,CAAQ,SAAA,CAAU,MAAM,iBAAiB,CAAA;AAClE,IAAA,OAAO,MAAM,KAAA,EAAM;AAAA,EACrB,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAGhB,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,aAAA,CAAc,OAAA,GAAU,MAAA;AACxB,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,eAAe,OAAA,EAAS;AAC1B,MAAA,aAAA,CAAc,OAAA,GAAU,MAAA;AACxB,MAAA;AAAA,IACF;AAIA,IAAA,IACE,iBAAA,CAAkB,OAAA,KAAY,MAAA,IAC9B,iBAAA,CAAkB,YAAY,MAAA,EAC9B;AACA,MAAA,aAAA,CAAc,OAAA,GAAU,MAAA;AAExB,MAAA,iBAAA,CAAkB,OAAA,GAAU,IAAA;AAC5B,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,iBAAA,CAAkB,YAAY,SAAA,EAAW;AAC3C,MAAA,aAAA,CAAc,OAAA,GAAU,MAAA;AACxB,MAAA,iBAAA,CAAkB,OAAA,GAAU,IAAA;AAC5B,MAAA;AAAA,IACF;AAEA,IAAA,iBAAA,CAAkB,OAAA,GAAU,KAAA;AAE5B,IAAA,MAAM,MAAM,UAAA,CAAW,OAAA;AACvB,IAAA,MAAM,OAAO,aAAA,CAAc,OAAA;AAC3B,IAAA,MAAM,IAAA,GAAO,MAAA;AACb,IAAA,MAAM,OAAA,GAAU,aAAA,CAAc,IAAA,EAAM,IAAA,EAAM,EAAE,CAAA;AAE5C,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAGlB,MAAA,IAAI,GAAA,CAAI,SAAQ,EAAG;AACjB,QAAA,MAAA,CAAO,MAAM,uDAAA,EAAyD;AAAA,UACpE,YAAA,EAAc,GAAA,CAAI,QAAA,EAAS,CAAE;AAAA,SAC9B,CAAA;AACD,QAAA,GAAA,CAAI,WAAA,EAAY;AAAA,MAClB;AAGA,MAAA,MAAM,OAAA,GAAU,gBAAgB,IAAW,CAAA;AAC3C,MAAA,IAAI,OAAA,KAAY,yBAAyB,OAAA,EAAS;AAEhD,QAAA,GAAA,CAAI,OAAO,OAAO,CAAA;AAClB,QAAA,SAAA,CAAU,OAAA,GAAU,MAAA;AACpB,QAAA,wBAAA,CAAyB,OAAA,GAAU,OAAA;AACnC,QAAA,iBAAA,CAAkB,OAAA,GAAU,KAAA;AAE5B,QAAA,MAAA,CAAO,MAAM,sBAAA,EAAwB;AAAA,UACnC,SAAS,OAAA,CAAQ,MAAA;AAAA,UACjB,OAAA,EAAS,IAAI,OAAA,EAAQ;AAAA,UACrB,OAAA,EAAS,IAAI,OAAA,EAAQ;AAAA,UACrB,KAAA,EAAO,IAAI,QAAA;AAAS,SACrB,CAAA;AAAA,MACH,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,MAAM,4CAAA,EAA8C;AAAA,UACzD,OAAA;AAAA,UACA,iBAAiB,wBAAA,CAAyB;AAAA,SAC3C,CAAA;AAAA,MACH;AAAA,IACF;AACA,IAAA,aAAA,CAAc,OAAA,GAAU,IAAA;AAAA,EAC1B,CAAA,EAAG,CAAC,MAAA,EAAQ,WAAA,EAAa,MAAM,CAAC,CAAA;AAGhC,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,cAAA,IAAkB,CAAC,eAAe,CAAC,UAAA,CAAW,WAAW,CAAC,YAAA;AAC7D,MAAA;AAEF,IAAA,MAAM,SAAA,GAAY,CAAC,CAAA,KAAqB;AAhO5C,MAAA,IAAAC,GAAAA;AAkOM,MAAA,MAAM,GAAA,GAAM,CAAA,CAAE,OAAA,IAAW,CAAA,CAAE,OAAA;AAC3B,MAAA,IAAI,CAAC,GAAA,EAAK;AAGV,MAAA,MAAM,GAAA,GAAA,CAAO,CAAA,CAAE,GAAA,IAAO,EAAA,EAAI,WAAA,EAAY;AACtC,MAAA,IAAI,QAAQ,GAAA,EAAK;AAGjB,MAAA,IACE,CAAC,mBACD,iBAAA,CAAA,CAAmBA,GAAAA,GAAA,EAAE,MAAA,KAAF,IAAA,GAAAA,GAAAA,GAAwB,IAAI,CAAA,EAC/C;AACA,QAAA;AAAA,MACF;AAGA,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,CAAA,CAAE,eAAA,EAAgB;AAElB,MAAA,MAAM,MAAM,UAAA,CAAW,OAAA;AACvB,MAAA,MAAM,YAAY,CAAA,CAAE,QAAA;AAEpB,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,IAAI,GAAA,CAAI,SAAQ,EAAG;AACjB,UAAA,WAAA,EAAY;AAAA,QACd;AAAA,MACF,CAAA,MAAO;AACL,QAAA,IAAI,GAAA,CAAI,SAAQ,EAAG;AACjB,UAAA,WAAA,EAAY;AAAA,QACd;AAAA,MACF;AAAA,IACF,CAAA;AAEA,IAAA,YAAA,CAAa,gBAAA,CAAiB,WAAW,SAAA,EAAkB;AAAA,MACzD,OAAA,EAAS;AAAA,KACV,CAAA;AACD,IAAA,OAAO,MAAM;AACX,MAAA,YAAA,CAAa,mBAAA;AAAA,QACX,SAAA;AAAA,QACA,SAAA;AAAA,QACA,EAAE,SAAS,IAAA;AAAK,OAClB;AAAA,IACF,CAAA;AAAA,EACF,GAAG,CAAC,cAAA,EAAgB,eAAA,EAAiB,WAAA,EAAa,YAAY,CAAC,CAAA;AAE/D,EAAA,MAAM,WAAA,GAAcJ,kBAAY,MAAM;AACpC,IAAA,IAAI,CAAC,WAAW,OAAA,EAAS;AAEzB,IAAA,MAAA,CAAO,KAAA,CAAM,8BAAA,EAAgC,UAAA,CAAW,OAAA,CAAQ,UAAU,CAAA;AAE1E,IAAA,qBAAA,CAAsB,QAAQ,KAAA,EAAM;AACpC,IAAA,iBAAA,CAAkB,OAAA,GAAU,MAAA;AAC5B,IAAA,SAAA,CAAU,OAAA,GAAU,MAAA;AAGpB,IAAA,MAAM,cAAA,GAAiB,UAAA,CAAW,OAAA,CAAQ,IAAA,EAAK;AAE/C,IAAA,MAAA,CAAO,KAAA,CAAM,6BAAA,EAA+B,UAAA,CAAW,OAAA,CAAQ,UAAU,CAAA;AAEzE,IAAA,IAAI,CAAC,cAAA,EAAgB;AAEnB,MAAA,iBAAA,CAAkB,OAAA,GAAU,IAAA;AAC5B,MAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AACpB,MAAA;AAAA,IACF;AAEA,IAAA,wBAAA,CAAyB,OAAA,GAAU,EAAA;AAGnC,IAAA,UAAA,CAAW,MAAM;AAvSrB,MAAA,IAAAI,GAAAA;AAwSM,MAAA,MAAM,WAAA,GAAc,KAAK,SAAA,EAAU;AACnC,MAAA,MAAM,EAAE,OAAA,EAAS,OAAA,EAAS,WAAA,KAAgB,IAAA,CAAK,SAAA;AAC/C,MAAA,MAAM,aAAA,GAAgB,eAAe,WAAW,CAAA;AAGhD,MAAA,MAAM,YAAY,UAAA,CAAW;AAAA,QAC3B,MAAA,EAAQ,WAAA;AAAA,QACR,OAAA;AAAA,QACA,OAAA;AAAA,QACA;AAAA,OACD,CAAA;AAED,MAAA,MAAA,CAAO,MAAM,eAAA,EAAiB;AAAA,QAC5B,cAAA;AAAA,QACA,aAAA;AAAA,QACA,SAAA;AAAA,QACA,OAAA;AAAA,QACA,gBAAA,EAAkB,MAAA,CAAO,IAAA,CAAK,WAAW,CAAA,CAAE,MAAA;AAAA,QAC3C,gBAAA;AAAA,QACA,aAAA,EAAA,CAAeA,GAAAA,GAAA,UAAA,CAAW,OAAA,KAAX,gBAAAA,GAAAA,CAAoB,QAAA;AAAA,OACpC,CAAA;AAED,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,iBAAA,CAAkB,OAAA,GAAU,KAAA;AAC5B,QAAA,iBAAA,CAAkB,OAAA,GAAU,IAAA;AAC5B,QAAA,wBAAA,CAAyB,OAAA,GAAU,gBAAgB,WAAkB,CAAA;AAAA,MACvE;AAGA,MAAA,IAAI,CAAC,oBAAoB,SAAA,EAAW;AAClC,QAAA,MAAA,CAAO,KAAA;AAAA,UACL;AAAA,SACF;AAEA,QAAA,iBAAA,CAAkB,OAAA,GAAU,IAAA;AAE5B,QAAA,UAAA,CAAW,MAAM;AACf,UAAA,MAAM,kBAAA,GAAqB,KAAK,SAAA,EAAU;AAC1C,UAAA,MAAM,kBAAA,GAAqB,KAAK,SAAA,CAAU,WAAA;AAC1C,UAAA,aAAA,CAAc,kBAAA,EAAyB,oBAAoB,IAAI,CAAA;AAG/D,UAAA,UAAA,CAAW,MAAM;AACf,YAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AAAA,UACtB,GAAG,EAAE,CAAA;AAAA,QACP,GAAG,GAAG,CAAA;AAAA,MACR,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,KAAA;AAAA,UACL,4DAAA;AAAA,UACA;AAAA,YACE,gBAAA;AAAA,YACA,SAAA;AAAA,YACA;AAAA;AACF,SACF;AAGA,QAAA,UAAA,CAAW,MAAM;AACf,UAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AAAA,QACtB,GAAG,EAAE,CAAA;AAAA,MACP;AAAA,IACF,GAAG,EAAE,CAAA;AAAA,EACP,CAAA,EAAG;AAAA,IACD,IAAA;AAAA,IACA,gBAAA;AAAA,IACA,cAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,WAAA,GAAcJ,kBAAY,MAAM;AACpC,IAAA,IAAI,CAAC,WAAW,OAAA,EAAS;AAEzB,IAAA,MAAA,CAAO,KAAA,CAAM,8BAAA,EAAgC,UAAA,CAAW,OAAA,CAAQ,UAAU,CAAA;AAE1E,IAAA,qBAAA,CAAsB,QAAQ,KAAA,EAAM;AACpC,IAAA,iBAAA,CAAkB,OAAA,GAAU,MAAA;AAC5B,IAAA,SAAA,CAAU,OAAA,GAAU,MAAA;AAGpB,IAAA,MAAM,cAAA,GAAiB,UAAA,CAAW,OAAA,CAAQ,IAAA,EAAK;AAE/C,IAAA,MAAA,CAAO,KAAA,CAAM,6BAAA,EAA+B,UAAA,CAAW,OAAA,CAAQ,UAAU,CAAA;AAEzE,IAAA,IAAI,CAAC,cAAA,EAAgB;AAEnB,MAAA,iBAAA,CAAkB,OAAA,GAAU,IAAA;AAC5B,MAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AACpB,MAAA;AAAA,IACF;AAEA,IAAA,wBAAA,CAAyB,OAAA,GAAU,EAAA;AAGnC,IAAA,UAAA,CAAW,MAAM;AAvYrB,MAAA,IAAAI,GAAAA;AAwYM,MAAA,MAAM,WAAA,GAAc,KAAK,SAAA,EAAU;AACnC,MAAA,MAAM,EAAE,OAAA,EAAS,OAAA,EAAS,WAAA,KAAgB,IAAA,CAAK,SAAA;AAC/C,MAAA,MAAM,aAAA,GAAgB,eAAe,WAAW,CAAA;AAGhD,MAAA,MAAM,YAAY,UAAA,CAAW;AAAA,QAC3B,MAAA,EAAQ,WAAA;AAAA,QACR,OAAA;AAAA,QACA,OAAA;AAAA,QACA;AAAA,OACD,CAAA;AAED,MAAA,MAAA,CAAO,MAAM,eAAA,EAAiB;AAAA,QAC5B,cAAA;AAAA,QACA,aAAA;AAAA,QACA,SAAA;AAAA,QACA,OAAA;AAAA,QACA,gBAAA,EAAkB,MAAA,CAAO,IAAA,CAAK,WAAW,CAAA,CAAE,MAAA;AAAA,QAC3C,gBAAA;AAAA,QACA,aAAA,EAAA,CAAeA,GAAAA,GAAA,UAAA,CAAW,OAAA,KAAX,gBAAAA,GAAAA,CAAoB,QAAA;AAAA,OACpC,CAAA;AAED,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,iBAAA,CAAkB,OAAA,GAAU,KAAA;AAC5B,QAAA,wBAAA,CAAyB,OAAA,GAAU,gBAAgB,WAAkB,CAAA;AAAA,MACvE;AAGA,MAAA,IAAI,CAAC,oBAAoB,SAAA,EAAW;AAClC,QAAA,MAAA,CAAO,KAAA;AAAA,UACL;AAAA,SACF;AAEA,QAAA,iBAAA,CAAkB,OAAA,GAAU,IAAA;AAE5B,QAAA,UAAA,CAAW,MAAM;AACf,UAAA,MAAM,kBAAA,GAAqB,KAAK,SAAA,EAAU;AAC1C,UAAA,MAAM,kBAAA,GAAqB,KAAK,SAAA,CAAU,WAAA;AAC1C,UAAA,aAAA,CAAc,kBAAA,EAAyB,oBAAoB,IAAI,CAAA;AAG/D,UAAA,UAAA,CAAW,MAAM;AACf,YAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AAAA,UACtB,GAAG,EAAE,CAAA;AAAA,QACP,GAAG,GAAG,CAAA;AAAA,MACR,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,KAAA;AAAA,UACL,4DAAA;AAAA,UACA;AAAA,YACE,gBAAA;AAAA,YACA,SAAA;AAAA,YACA;AAAA;AACF,SACF;AAGA,QAAA,UAAA,CAAW,MAAM;AACf,UAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AAAA,QACtB,GAAG,EAAE,CAAA;AAAA,MACP;AAAA,IACF,GAAG,EAAE,CAAA;AAAA,EACP,CAAA,EAAG;AAAA,IACD,IAAA;AAAA,IACA,gBAAA;AAAA,IACA,cAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,mBAAA,GAAsBJ,kBAAY,MAAM;AAC5C,IAAA,IAAI,CAAC,WAAW,OAAA,EAAS;AAEzB,IAAA,MAAA,CAAO,MAAM,qDAAqD,CAAA;AAElE,IAAA,iBAAA,CAAkB,OAAA,GAAU,MAAA;AAC5B,IAAA,SAAA,CAAU,OAAA,GAAU,MAAA;AAGpB,IAAA,MAAM,cAAA,GAAiB,UAAA,CAAW,OAAA,CAAQ,oBAAA,EAAqB;AAE/D,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,MAAA,CAAO,MAAM,oBAAoB,CAAA;AACjC,MAAA,iBAAA,CAAkB,OAAA,GAAU,IAAA;AAC5B,MAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AACpB,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,MAAA,iBAAA,CAAkB,OAAA,GAAU,IAAA;AAAA,IAC9B;AAGA,IAAA,UAAA,CAAW,MAAM;AACf,MAAA,MAAM,kBAAA,GAAqB,KAAK,SAAA,EAAU;AAC1C,MAAA,MAAM,kBAAA,GAAqB,KAAK,SAAA,CAAU,WAAA;AAE1C,MAAA,MAAA,CAAO,MAAM,qCAAA,EAAuC;AAAA,QAClD,MAAA,EAAQ,kBAAA;AAAA,QACR,WAAA,EAAa;AAAA,OACd,CAAA;AAED,MAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,QAAA,aAAA,CAAc,kBAAA,EAAyB,oBAAoB,IAAI,CAAA;AAAA,MACjE;AAGA,MAAA,UAAA,CAAW,MAAM;AACf,QAAA,iBAAA,CAAkB,OAAA,GAAU,IAAA;AAC5B,QAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AAAA,MACtB,GAAG,GAAG,CAAA;AAAA,IACR,GAAG,GAAG,CAAA;AAAA,EACR,GAAG,CAAC,IAAA,EAAM,gBAAA,EAAkB,aAAA,EAAe,MAAM,CAAC,CAAA;AAElD,EAAA,MAAM,eAAA,GAAkBA,iBAAAA;AAAA,IACtB,CAAC,IAAA,KAAY;AAEX,MAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AACrC,QAAA,MAAA,CAAO,MAAM,0CAA0C,CAAA;AACvD,QAAA;AAAA,MACF;AAEA,MAAA,MAAA,CAAO,KAAA,CAAM,4BAA4B,IAAI,CAAA;AAE7C,MAAA,cAAA,CAAe,OAAA,GAAU,IAAA;AACzB,MAAA,iBAAA,CAAkB,OAAA,GAAU,SAAA;AAI5B,MAAA,IAAI,UAAA,CAAW,OAAA,EAAS,UAAA,CAAW,OAAA,CAAQ,KAAA,EAAM;AACjD,MAAA,aAAA,CAAc,OAAA,GAAU,IAAA;AACxB,MAAA,wBAAA,CAAyB,OAAA,GAAU,gBAAgB,IAAW,CAAA;AAK9D,MAAA,iBAAA,CAAkB,OAAA,GAAU,IAAA;AAC5B,MAAA,OAAA,CAAQ,OAAA,EAAQ,CAAE,IAAA,CAAK,MAAM;AAC3B,QAAA,cAAA,CAAe,OAAA,GAAU,KAAA;AAAA,MAC3B,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AAGA,EAAA,MAAM,OAAA,GAAuBO,cAAQ,MAAM;AACzC,IAAA,IAAI,CAAC,WAAA,IAAe,CAAC,UAAA,CAAW,OAAA,EAAS;AACvC,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,MAAA;AAAA,QACN,IAAA,EAAM,MAAA;AAAA,QACN,YAAA,EAAc,MAAA;AAAA,QACd,OAAA,EAAS,KAAA;AAAA,QACT,OAAA,EAAS;AAAA,OACX;AAAA,IACF;AAEA,IAAA,MAAM,MAAM,UAAA,CAAW,OAAA;AACvB,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,WAAA;AAAA,MACN,IAAA,EAAM,WAAA;AAAA,MACN,YAAA,EAAc,mBAAA;AAAA,MACd,OAAA,EAAS,IAAI,OAAA,EAAQ;AAAA,MACrB,OAAA,EAAS,IAAI,OAAA;AAAQ,KACvB;AAAA,EACF,CAAA,EAAG;AAAA,IACD,WAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA;AAAA,IACA,mBAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,iBAAA,GAAoBP,iBAAAA;AAAA,IACxB,CAAC,IAAA,KAAY;AAEX,MAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AACrC,QAAA,MAAA,CAAO,MAAM,4CAA4C,CAAA;AACzD,QAAA;AAAA,MACF;AAEA,MAAA,MAAA,CAAO,KAAA,CAAM,8BAA8B,IAAI,CAAA;AAE/C,MAAA,cAAA,CAAe,OAAA,GAAU,IAAA;AACzB,MAAA,iBAAA,CAAkB,OAAA,GAAU,SAAA;AAE5B,MAAA,IAAA,CAAK,MAAM,IAAA,EAAa;AAAA,QACtB,SAAA,EAAW,KAAA;AAAA,QACX,WAAA,EAAa,KAAA;AAAA,QACb,UAAA,EAAY;AAAA,OACb,CAAA;AAED,MAAA,IAAI,UAAA,CAAW,OAAA,EAAS,UAAA,CAAW,OAAA,CAAQ,KAAA,EAAM;AACjD,MAAA,aAAA,CAAc,OAAA,GAAU,IAAA;AACxB,MAAA,wBAAA,CAAyB,OAAA,GAAU,gBAAgB,IAAW,CAAA;AAG9D,MAAA,IAAI,iCAAQ,cAAA,EAAgB;AAC1B,QAAA,MAAA,CAAO,eAAe,IAAI,CAAA;AAAA,MAC5B;AACA,MAAA,IAAI,iCAAQ,oBAAA,EAAsB;AAChC,QAAA,MAAA,CAAO,qBAAqB,IAAI,CAAA;AAAA,MAClC;AAEA,MAAA,iBAAA,CAAkB,OAAA,GAAU,IAAA;AAC5B,MAAA,OAAA,CAAQ,OAAA,EAAQ,CAAE,IAAA,CAAK,MAAM;AAC3B,QAAA,cAAA,CAAe,OAAA,GAAU,KAAA;AAAA,MAC3B,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,IAAA,EAAM,MAAA,EAAQ,MAAM;AAAA,GACvB;AAEA,EAAA,OAAO;AAAA;AAAA,IAEL,OAAA;AAAA,IACA,iBAAA;AAAA,IACA,eAAA;AAAA;AAAA,IAGA,SAAA;AAAA,IACA,qBAAA;AAAA,IACA,cAAA;AAAA,IACA,iBAAA;AAAA,IACA,iBAAA;AAAA,IACA,UAAA;AAAA,IACA,wBAAA;AAAA;AAAA,IAGA,WAAA;AAAA,IACA;AAAA,GACF;AACF;ACtmBA,IAAM,4BAAA,GAA+B,GAAA;AAE9B,SAAS,eAAA,CACd,IAAA,EACA,OAAA,EACA,cAAA,EACA,kBACA,KAAA,EACA;AACA,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,eAAA,EAAiB,KAAK,CAAA;AAClD,EAAA,MAAM,kBAAA,GAAqBD,aAA6C,IAAI,CAAA;AAC5E,EAAA,MAAM,gBAAA,GAAmBA,aAAe,EAAE,CAAA;AAC1C,EAAA,MAAM,iBAAA,GAAoBA,YAAAA,CAAoB,EAAE,CAAA;AAChD,EAAA,MAAM,iBAAA,GAAoBA,aAAO,KAAK,CAAA;AACtC,EAAA,MAAM,iBAAA,GAAoBA,aAAO,KAAK,CAAA;AACtC,EAAA,MAAM,sBAAA,GAAyBA,aAA6C,IAAI,CAAA;AAChF,EAAA,MAAM,iBAAA,GAAoBA,aAAe,EAAE,CAAA;AAE3C,EAAA,MAAM,oBAAA,GAAuBC,kBAAY,MAAM;AAC7C,IAAA,IAAI,mBAAmB,OAAA,EAAS;AAC9B,MAAA,YAAA,CAAa,mBAAmB,OAAO,CAAA;AACvC,MAAA,kBAAA,CAAmB,OAAA,GAAU,IAAA;AAAA,IAC/B;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,wBAAA,GAA2BA,kBAAY,MAAM;AACjD,IAAA,IAAI,uBAAuB,OAAA,EAAS;AAClC,MAAA,YAAA,CAAa,uBAAuB,OAAO,CAAA;AAC3C,MAAA,sBAAA,CAAuB,OAAA,GAAU,IAAA;AAAA,IACnC;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,iBAAA,GAAoBA,iBAAAA,CAAY,CAAC,OAAA,KAAyB;AAC9D,IAAA,iBAAA,CAAkB,OAAA,GAAU,OAAA;AAAA,EAC9B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,mBAAA,GAAsBA,kBAAY,MAAM;AAC5C,IAAA,iBAAA,CAAkB,UAAU,EAAC;AAAA,EAC/B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,iBAAA,GAAoBA,iBAAAA,CAAY,CAAC,OAAA,KAAqB;AAC1D,IAAA,iBAAA,CAAkB,OAAA,GAAU,OAAA;AAAA,EAC9B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,iBAAA,GAAoBA,iBAAAA,CAAY,CAAC,KAAA,KAAmB;AACxD,IAAA,iBAAA,CAAkB,OAAA,GAAU,KAAA;AAAA,EAC9B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,gBAAA,GAAmBA,iBAAAA,CAAY,CAAC,GAAA,KAAgB;AACpD,IAAA,gBAAA,CAAiB,OAAA,GAAU,GAAA;AAAA,EAC7B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,kBAAA,GAAqBA,iBAAAA;AAAA,IACzB,CAAC,SAAA,KAA6C;AAC5C,MAAA,kBAAA,CAAmB,OAAA,GAAU,SAAA;AAAA,IAC/B,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,oBAAA,GAAuBA,iBAAAA;AAAA,IAC3B,CAAC,MAAA,KAAgB;AACf,MAAA,MAAM,eAAe,IAAA,CAAK,SAAA;AAAA,QACxB,MAAA,CAAO,KAAK,MAAM,CAAA,CACf,MAAK,CACL,MAAA,CAAO,CAAC,GAAA,EAAK,GAAA,KAAQ;AACpB,UAAA,GAAA,CAAI,GAAG,CAAA,GAAI,MAAA,CAAO,GAAG,CAAA;AACrB,UAAA,OAAO,GAAA;AAAA,QACT,CAAA,EAAG,EAAS;AAAA,OAChB;AACA,MAAA,iBAAA,CAAkB,OAAA,GAAU,YAAA;AAC5B,MAAA,MAAA,CAAO,KAAA,CAAM,0BAAA,EAA4B,EAAE,YAAA,EAAc,CAAA;AAAA,IAC3D,CAAA;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AAEA,EAAA,MAAM,wBAAA,GAA2BA,kBAAY,MAAM;AACjD,IAAA,MAAM,SAAA,GAAY;AAAA,MAChB,gBAAgB,iBAAA,CAAkB,OAAA;AAAA,MAClC,kBAAA,EAAoB,MAAA,CAAO,IAAA,CAAK,iBAAA,CAAkB,OAAO,CAAA;AAAA,MACzD,YAAA,EAAc,QAAQ,OAAA,EAAQ;AAAA,MAC9B,gBAAgB,iBAAA,CAAkB,OAAA;AAAA,MAClC,gBAAA;AAAA,MACA,cAAA,EAAgB,CAAC,CAAC,kBAAA,CAAmB,OAAA;AAAA,MACrC,OAAA,EAAS,KAAK,SAAA,CAAU,OAAA;AAAA,MACxB,kBAAkB,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,WAAW,CAAA,CAAE;AAAA,KAC5D;AAEA,IAAA,MAAA,CAAO,KAAA,CAAM,sCAAsC,SAAS,CAAA;AAG5D,IAAA,IAAI,kBAAkB,OAAA,EAAS;AAE7B,MAAA,wBAAA,EAAyB;AAGzB,MAAA,sBAAA,CAAuB,OAAA,GAAU,WAAW,MAAM;AAChD,QAAA,iBAAA,CAAkB,OAAA,GAAU,KAAA;AAC5B,QAAA,sBAAA,CAAuB,OAAA,GAAU,IAAA;AAAA,MACnC,GAAG,4BAA4B,CAAA;AAE/B,MAAA,MAAA,CAAO,KAAA,CAAM,+CAA+C,SAAS,CAAA;AACrE,MAAA,OAAO,KAAA;AAAA,IACT;AAGA,IAAA,IAAI,mBAAmB,OAAA,EAAS;AAC9B,MAAA,MAAA,CAAO,KAAA;AAAA,QACL,6DAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,MAAM,eAAe,MAAA,CAAO,IAAA,CAAK,iBAAA,CAAkB,OAAO,EAAE,MAAA,GAAS,CAAA;AACrE,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,MAAA,CAAO,KAAA;AAAA,QACL,kDAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,MAAM,cAAA,GAAiB,CAAC,OAAA,CAAQ,OAAA,EAAQ;AACxC,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,MAAA,CAAO,KAAA;AAAA,QACL,iDAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,IAAI,CAAC,gBAAA,IAAoB,iBAAA,CAAkB,OAAA,EAAS;AAClD,MAAA,MAAA,CAAO,KAAA,CAAM,iDAAiD,SAAS,CAAA;AACvE,MAAA,OAAO,IAAA;AAAA,IACT;AAIA,IAAA,IAAI,kBAAkB,OAAA,EAAS;AAC7B,MAAA,IAAI;AACF,QAAA,MAAM,aAAA,GAAgB,KAAK,SAAA,EAAU;AACrC,QAAA,MAAM,sBAAsB,IAAA,CAAK,SAAA;AAAA,UAC/B,MAAA,CAAO,KAAK,aAAa,CAAA,CACtB,MAAK,CACL,MAAA,CAAO,CAAC,GAAA,EAAK,GAAA,KAAQ;AACpB,YAAA,GAAA,CAAI,GAAG,CAAA,GAAI,aAAA,CAAc,GAAG,CAAA;AAC5B,YAAA,OAAO,GAAA;AAAA,UACT,CAAA,EAAG,EAAS;AAAA,SAChB;AAEA,QAAA,IAAI,mBAAA,KAAwB,kBAAkB,OAAA,EAAS;AACrD,UAAA,MAAA,CAAO,KAAA;AAAA,YACL,gFAAA;AAAA,YACA;AAAA,cACE,GAAG,SAAA;AAAA,cACH,mBAAA,EAAqB;AAAA;AACvB,WACF;AACA,UAAA,OAAO,KAAA;AAAA,QACT;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,MAAA,CAAO,MAAM,iDAAiD,CAAA;AAAA,MAChE;AAAA,IACF;AAGA,IAAA,MAAM,iBAAiB,MAAA,CAAO,IAAA,CAAK,KAAK,SAAA,CAAU,WAAW,EAAE,MAAA,GAAS,CAAA;AACxE,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,MAAA,CAAO,MAAM,2CAAA,EAA6C;AAAA,QACxD,GAAG,SAAA;AAAA,QACH,WAAA,EAAa,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,UAAU,WAAW;AAAA,OACpD,CAAA;AACD,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,IAAI;AACF,MAAA,MAAM,aAAA,GAAgB,KAAK,SAAA,EAAU;AACrC,MAAA,MAAM,aAAA,GAAgB,eAAe,aAAa,CAAA;AAClD,MAAA,MAAA,CAAO,MAAM,yCAAA,EAA2C;AAAA,QACtD,GAAG,SAAA;AAAA,QACH;AAAA,OACD,CAAA;AACD,MAAA,OAAO,CAAC,aAAA;AAAA,IACV,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,MAAM,mDAAmD,CAAA;AAChE,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF,CAAA,EAAG,CAAC,OAAA,EAAS,gBAAA,EAAkB,MAAM,cAAA,EAAgB,MAAA,EAAQ,wBAAwB,CAAC,CAAA;AAEtF,EAAA,MAAM,iBAAA,GAAoBA,kBAAY,MAAM;AAC1C,IAAA,MAAM,eAAe,iBAAA,CAAkB,OAAA;AACvC,IAAA,MAAM,cAAA,GAAiB,QAAQ,iBAAA,EAAkB;AACjD,IAAA,OAAO,EAAE,GAAG,YAAA,EAAc,GAAG,cAAA,EAAe;AAAA,EAC9C,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,MAAM,OAAA,GAAUA,kBAAY,MAAM;AAChC,IAAA,MAAM,oBACJ,MAAA,CAAO,IAAA,CAAK,iBAAA,CAAkB,OAAO,EAAE,MAAA,KAAW,CAAA;AACpD,IAAA,MAAM,YAAA,GAAe,QAAQ,OAAA,EAAQ;AACrC,IAAA,MAAM,aAAA,GAAgB,CAAC,kBAAA,CAAmB,OAAA;AAC1C,IAAA,OAAO,qBAAqB,YAAA,IAAgB,aAAA;AAAA,EAC9C,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,MAAM,KAAA,GAAQA,kBAAY,YAAY;AACpC,IAAA,oBAAA,EAAqB;AACrB,IAAA,IAAI,OAAO,IAAA,CAAK,iBAAA,CAAkB,OAAO,CAAA,CAAE,SAAS,CAAA,EAAG;AACrD,MAAA,OAAA,CAAQ,WAAA,CAAY,kBAAkB,OAAO,CAAA;AAC7C,MAAA,iBAAA,CAAkB,UAAU,EAAC;AAAA,IAC/B;AACA,IAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,KAAA,EAAM;AAGnC,IAAA,IAAI,OAAO,EAAA,EAAI;AACb,MAAA,MAAM,aAAA,GAAgB,KAAK,SAAA,EAAU;AACrC,MAAA,oBAAA,CAAqB,aAAa,CAAA;AAAA,IACpC;AAEA,IAAA,OAAO,MAAA;AAAA,EACT,GAAG,CAAC,OAAA,EAAS,oBAAA,EAAsB,IAAA,EAAM,oBAAoB,CAAC,CAAA;AAE9D,EAAA,MAAM,KAAA,GAAQA,kBAAY,MAAM;AAC9B,IAAA,oBAAA,EAAqB;AACrB,IAAA,wBAAA,EAAyB;AACzB,IAAA,iBAAA,CAAkB,UAAU,EAAC;AAC7B,IAAA,iBAAA,CAAkB,OAAA,GAAU,KAAA;AAC5B,IAAA,MAAM,IAAA,GAAO,KAAK,SAAA,EAAU;AAC5B,IAAA,IAAI,cAAA,CAAe,IAAI,CAAA,EAAG;AACxB,MAAA,iBAAA,CAAkB,OAAA,GAAU,IAAA;AAC5B,MAAA,oBAAA,CAAqB,IAAI,CAAA;AAAA,IAC3B;AACA,IAAA,OAAA,CAAQ,KAAA,EAAM;AAAA,EAChB,CAAA,EAAG;AAAA,IACD,OAAA;AAAA,IACA,oBAAA;AAAA,IACA,wBAAA;AAAA,IACA,IAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACD,CAAA;AAGD,EAAAG,gBAAU,MAAM;AACd,IAAA,OAAO,MAAM;AACX,MAAA,wBAAA,EAAyB;AAAA,IAC3B,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,wBAAwB,CAAC,CAAA;AAE7B,EAAA,OAAO;AAAA;AAAA,IAEL,kBAAA;AAAA,IACA,gBAAA;AAAA,IACA,iBAAA;AAAA,IACA,iBAAA;AAAA,IACA,iBAAA;AAAA;AAAA,IAGA,oBAAA;AAAA,IACA,iBAAA;AAAA,IACA,mBAAA;AAAA,IACA,iBAAA;AAAA,IACA,iBAAA;AAAA,IACA,gBAAA;AAAA,IACA,kBAAA;AAAA,IACA,oBAAA;AAAA;AAAA,IAGA,wBAAA;AAAA,IACA,iBAAA;AAAA,IACA,OAAA;AAAA;AAAA,IAGA,KAAA;AAAA,IACA;AAAA,GACF;AACF;;;AC3RO,IAAM,uBAAN,MAEP;AAAA,EACE,MAAM,QAAA,GAA6B;AACjC,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEO,IAAM,4BAAN,MAEP;AAAA,EACE,MAAM,QAAA,CAAS,IAAA,EAAqB,OAAA,EAAwC;AAC1E,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AAClC,IAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAGhC,IAAA,OAAO,KAAK,OAAA,CAAQ,MAAA,EAAe,EAAE,WAAA,EAAa,OAAO,CAAA;AAAA,EAC3D;AACF;AAEO,IAAM,8BAAN,MAEP;AAAA,EACE,MAAM,SAAS,IAAA,EAAuC;AACpD,IAAA,OAAO,KAAK,OAAA,CAAQ,MAAA,EAAW,EAAE,WAAA,EAAa,OAAO,CAAA;AAAA,EACvD;AACF;;;ACjBO,SAAS,wBAAA,CACd,OAAuB,SAAA,EACA;AACvB,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,MAAA;AACH,MAAA,OAAO,IAAI,oBAAA,EAAwB;AAAA,IACrC,KAAK,SAAA;AACH,MAAA,OAAO,IAAI,yBAAA,EAA6B;AAAA,IAC1C,KAAK,KAAA;AACH,MAAA,OAAO,IAAI,2BAAA,EAA+B;AAAA,IAC5C;AACE,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,IAAI,CAAA,CAAE,CAAA;AAAA;AAExD;;;ACyBO,SAAS,gBAAA,CAAwC;AAAA,EACtD,IAAA;AAAA,EACA,OAAA;AAAA,EACA,eAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,kBAAA;AAAA,EACA,cAAA;AAAA,EACA,uBAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA,kBAAA;AAAA,EACA,iBAAA;AAAA,EACA,gBAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,kBAAA;AAAA,EACA,oBAAA;AAAA,EACA,iBAAA;AAAA,EACA,mBAAA;AAAA,EACA,gBAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA;AAAA;AACF,CAAA,EAA+B;AAC7B,EAAA,MAAM,kBAAA,GAAqBI,aAAAA;AAAA,IACzB,MAAM,yBAA4B,kBAAkB,CAAA;AAAA,IACpD,CAAC,kBAAkB;AAAA,GACrB;AAEA,EAAA,MAAM,aAAA,GAAgBP,iBAAAA;AAAA,IACpB,CAAC,SAAA,EAAc,cAAA,EAAqB,cAAA,GAAiB,KAAA,KAAU;AAC7D,MAAA,oBAAA,EAAqB;AAErB,MAAA,MAAM,SAAA,GAAY,WAAW,YAAY;AACvC,QAAA,IAAI;AAEF,UAAA,IAAI,aAAA;AAEJ,UAAA,IACE,mBACC,SAAA,CAAU,OAAA,KAAY,MAAA,IAAU,SAAA,CAAU,YAAY,MAAA,CAAA,EACvD;AAGA,YAAA,aAAA,GAAgB,EAAC;AAEjB,YAAA,IAAI,YAAY,OAAA,EAAS;AAEvB,cAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,SAAS,CAAA,EAAG;AACxC,gBAAA,IACE,CAACF,WAAW,SAAA,CAAkB,GAAG,GAAG,WAAA,CAAY,OAAA,CAAQ,GAAG,CAAC,CAAA,EAC5D;AACA,kBAAC,aAAA,CAAsB,GAAG,CAAA,GAAK,SAAA,CAAkB,GAAG,CAAA;AAAA,gBACtD;AAAA,cACF;AAAA,YACF,CAAA,MAAO;AAEL,cAAA,aAAA,GAAgB,SAAA;AAAA,YAClB;AAEA,YAAA,MAAA,CAAO,KAAA;AAAA,cACL,6DAAA;AAAA,cACA;AAAA,gBACE,WAAA,EAAa,CAAC,CAAC,WAAA,CAAY,OAAA;AAAA,gBAC3B,aAAA,EAAe,MAAA,CAAO,IAAA,CAAK,aAAa,CAAA;AAAA,gBACxC;AAAA;AACF,aACF;AAAA,UACF,CAAA,MAAO;AACL,YAAA,MAAM,cAAA,GAAiB,wBAAwB,cAAc,CAAA;AAC7D,YAAA,aAAA,GAAgB,aAAA;AAAA,cACd,SAAA;AAAA,cACA;AAAA,aACF;AAAA,UACF;AAEA,UAAA,MAAA,CAAO,MAAM,wBAAA,EAA0B;AAAA,YACrC,WAAA,EAAa,MAAA,CAAO,IAAA,CAAK,aAAa,CAAA;AAAA,YACtC,aAAA;AAAA,YACA,UAAA,EAAY,cAAA;AAAA,YACZ,QAAQ,SAAA,CAAU;AAAA,WACnB,CAAA;AAGD,UAAA,IAAI,MAAA,CAAO,IAAA,CAAK,aAAa,CAAA,CAAE,WAAW,CAAA,EAAG;AAC3C,YAAA,MAAA,CAAO,MAAM,+BAA+B,CAAA;AAC5C,YAAA,mBAAA,EAAoB;AACpB,YAAA,MAAM,IAAA,GAAO,KAAK,SAAA,EAAU;AAC5B,YAAA,IAAI,cAAA,CAAe,IAAI,CAAA,EAAG;AACxB,cAAA,iBAAA,CAAkB,KAAK,CAAA;AACvB,cAAA,iBAAA,CAAkB,IAAI,CAAA;AAEtB,cAAA,IAAI,oBAAA,EAAsB;AACxB,gBAAA,oBAAA,CAAqB,IAAI,CAAA;AAAA,cAC3B;AAAA,YACF;AACA,YAAA;AAAA,UACF;AAGA,UAAA,IAAI,uBAAuB,MAAA,EAAQ;AACjC,YAAA,MAAMU,IAAAA,GAAM,gBAAgB,aAAoB,CAAA;AAChD,YAAA,IAAI,gBAAA,GAAmB,eAAA,CAAgB,GAAA,CAAIA,IAAG,CAAA;AAC9C,YAAA,IAAI,qBAAqB,KAAA,CAAA,EAAW;AAClC,cAAA,gBAAA,GAAmB,MAAM,kBAAA,CAAmB,QAAA;AAAA,gBAC1C,IAAA;AAAA,gBACA;AAAA,eACF;AACA,cAAA,eAAA,CAAgB,GAAA,CAAIA,MAAK,gBAAgB,CAAA;AACzC,cAAA,OAAA,CAAQ,eAAA,EAAgB;AAAA,YAC1B,CAAA,MAAO;AACL,cAAA,OAAA,CAAQ,cAAA,EAAe;AAAA,YACzB;AACA,YAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,cAAA,MAAA,CAAO,MAAM,mCAAmC,CAAA;AAChD,cAAA,mBAAA,EAAoB;AACpB,cAAA,MAAM,IAAA,GAAO,KAAK,SAAA,EAAU;AAC5B,cAAA,IAAI,cAAA,CAAe,IAAI,CAAA,EAAG;AACxB,gBAAA,iBAAA,CAAkB,KAAK,CAAA;AACvB,gBAAA,iBAAA,CAAkB,IAAI,CAAA;AAAA,cACxB;AACA,cAAA;AAAA,YACF;AAAA,UACF;AAGA,UAAA,MAAM,GAAA,GAAM,gBAAgB,aAAoB,CAAA;AAChD,UAAA,IAAI,GAAA,KAAQ,iBAAiB,OAAA,EAAS;AACpC,YAAA,MAAA,CAAO,MAAM,mCAAmC,CAAA;AAChD,YAAA,mBAAA,EAAoB;AACpB,YAAA,MAAM,IAAA,GAAO,KAAK,SAAA,EAAU;AAC5B,YAAA,IAAI,cAAA,CAAe,IAAI,CAAA,EAAG;AACxB,cAAA,iBAAA,CAAkB,KAAK,CAAA;AACvB,cAAA,iBAAA,CAAkB,IAAI,CAAA;AAEtB,cAAA,IAAI,oBAAA,EAAsB;AACxB,gBAAA,oBAAA,CAAqB,IAAI,CAAA;AAAA,cAC3B;AAAA,YACF;AACA,YAAA;AAAA,UACF;AACA,UAAA,gBAAA,CAAiB,GAAG,CAAA;AAEpB,UAAA,MAAA,CAAO,MAAM,8BAAA,EAAgC;AAAA,YAC3C,WAAA,EAAa,MAAA,CAAO,IAAA,CAAK,aAAa,CAAA;AAAA,YACtC,UAAA,EAAY,cAAA;AAAA,YACZ,QAAQ,SAAA,CAAU;AAAA,WACnB,CAAA;AAGD,UAAA,OAAA,CAAQ,YAAY,aAAa,CAAA;AACjC,UAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,KAAA,EAAM;AAEnC,UAAA,mBAAA,EAAoB;AACpB,UAAA,iBAAA,CAAkB,KAAK,CAAA;AAGvB,UAAA,IAAI,MAAA,CAAO,MAAM,oBAAA,EAAsB;AACrC,YAAA,MAAM,aAAA,GAAgB,KAAK,SAAA,EAAU;AACrC,YAAA,oBAAA,CAAqB,aAAa,CAAA;AAAA,UACpC;AAEA,UAAA,MAAM,SAAA,GAAY,KAAK,SAAA,EAAU;AACjC,UAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAC7B,YAAA,iBAAA,CAAkB,IAAI,CAAA;AAAA,UACxB;AAEA,UAAA,IAAI,MAAA,CAAO,MAAM,cAAA,EAAgB;AAC/B,YAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AAAA,UACtB;AAAA,QACF,SAAS,KAAA,EAAO;AACd,UAAA,MAAA,CAAO,MAAM,yBAAyB,CAAA;AACtC,UAAA,mBAAA,EAAoB;AACpB,UAAA,iBAAA,CAAkB,KAAK,CAAA;AAAA,QACzB;AAAA,MACF,CAAA,EAAG,MAAA,CAAO,UAAA,IAAc,GAAG,CAAA;AAE3B,MAAA,kBAAA,CAAmB,SAAS,CAAA;AAAA,IAC9B,CAAA;AAAA,IACA;AAAA,MACE,oBAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA;AAAA,MACA,MAAA;AAAA,MACA,uBAAA;AAAA,MACA,aAAA;AAAA,MACA,IAAA;AAAA,MACA,cAAA;AAAA,MACA,iBAAA;AAAA,MACA,iBAAA;AAAA,MACA,mBAAA;AAAA,MACA,kBAAA;AAAA,MACA,eAAA;AAAA,MACA,kBAAA;AAAA,MACA,OAAA;AAAA,MACA,gBAAA;AAAA,MACA,gBAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAA,CAAO,UAAA;AAAA,MACP,kBAAA;AAAA,MACA;AAAA;AAAA;AACF,GACF;AAEA,EAAA,MAAM,SAAA,GAAYR,kBAAY,YAAY;AACxC,IAAA,MAAA,CAAO,MAAM,sBAAsB,CAAA;AAGnC,IAAA,oBAAA,EAAqB;AAGrB,IAAA,mBAAA,EAAoB;AAGpB,IAAA,MAAM,aAAA,GAAgB,KAAK,SAAA,EAAU;AAGrC,IAAA,IAAI,cAAA,CAAe,aAAa,CAAA,EAAG;AACjC,MAAA,MAAA,CAAO,MAAM,4CAA4C,CAAA;AACzD,MAAA,iBAAA,CAAkB,KAAK,CAAA;AACvB,MAAA,iBAAA,CAAkB,IAAI,CAAA;AACtB,MAAA,OAAO,EAAE,IAAI,IAAA,EAAK;AAAA,IACpB;AAGA,IAAA,IAAI,gBAA6B,EAAC;AAElC,IAAA,IAAI,YAAY,OAAA,EAAS;AAEvB,MAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,aAAa,CAAA,EAAG;AAC5C,QAAA,IAAI,CAACF,WAAW,aAAA,CAAsB,GAAG,GAAG,WAAA,CAAY,OAAA,CAAQ,GAAG,CAAC,CAAA,EAAG;AACrE,UAAC,aAAA,CAAsB,GAAG,CAAA,GAAK,aAAA,CAAsB,GAAG,CAAA;AAAA,QAC1D;AAAA,MACF;AAAA,IACF,CAAA,MAAO;AAEL,MAAA,aAAA,GAAgB,aAAA;AAAA,IAClB;AAGA,IAAA,IAAI,MAAA,CAAO,IAAA,CAAK,aAAa,CAAA,CAAE,WAAW,CAAA,EAAG;AAC3C,MAAA,MAAA,CAAO,MAAM,kCAAkC,CAAA;AAC/C,MAAA,iBAAA,CAAkB,KAAK,CAAA;AACvB,MAAA,iBAAA,CAAkB,IAAI,CAAA;AACtB,MAAA,OAAO,EAAE,IAAI,IAAA,EAAK;AAAA,IACpB;AAGA,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,MAAM,EAAE,OAAA,EAAS,OAAA,EAAS,WAAA,KAAgB,IAAA,CAAK,SAAA;AAC/C,MAAA,MAAM,gBAAgB,UAAA,CAAW;AAAA,QAC/B,MAAA,EAAQ,aAAA;AAAA,QACR,OAAA;AAAA,QACA,OAAA;AAAA,QACA;AAAA,OACD,CAAA;AAED,MAAA,IAAI,CAAC,aAAA,EAAe;AAClB,QAAA,MAAA,CAAO,MAAM,gDAAA,EAAkD;AAAA,UAC7D,OAAA;AAAA,UACA,OAAA;AAAA,UACA,gBAAA,EAAkB,MAAA,CAAO,IAAA,CAAK,WAAW,CAAA,CAAE;AAAA,SAC5C,CAAA;AACD,QAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,4BAAA,EAA6B;AAAA,MAC1D;AAAA,IACF;AAEA,IAAA,MAAA,CAAO,MAAM,sBAAA,EAAwB;AAAA,MACnC,WAAA,EAAa,MAAA,CAAO,IAAA,CAAK,aAAa,CAAA;AAAA,MACtC,OAAA,EAAS;AAAA,KACV,CAAA;AAGD,IAAA,OAAA,CAAQ,YAAY,aAAa,CAAA;AACjC,IAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,KAAA,EAAM;AAGnC,IAAA,iBAAA,CAAkB,KAAK,CAAA;AAEvB,IAAA,IAAI,OAAO,EAAA,EAAI;AAEb,MAAA,IAAI,oBAAA,EAAsB;AACxB,QAAA,oBAAA,CAAqB,aAAa,CAAA;AAAA,MACpC;AACA,MAAA,iBAAA,CAAkB,IAAI,CAAA;AAAA,IACxB;AAEA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA,EAAG;AAAA,IACD,MAAA;AAAA,IACA,oBAAA;AAAA,IACA,mBAAA;AAAA,IACA,IAAA;AAAA,IACA,cAAA;AAAA,IACA,WAAA;AAAA,IACA,OAAA;AAAA,IACA,iBAAA;AAAA,IACA,iBAAA;AAAA,IACA,oBAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,OAAO;AAAA,IACL,aAAA;AAAA,IACA;AAAA,GACF;AACF;ACxTO,SAAS,kBAAA,CAA0C;AAAA,EACxD,IAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAA;AAAA,EACA,gBAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA,GAAc,IAAA;AAAA,EACd,cAAA;AAAA,EACA,wBAAA;AAAA,EACA,SAAA;AAAA,EACA,qBAAA;AAAA,EACA,iBAAA;AAAA,EACA,wBAAA;AAAA,EACA,kBAAA;AAAA,EACA,aAAA;AAAA,EACA,iBAAA;AAAA,EACA,mBAAA;AAAA,EACA,gBAAA;AAAA,EACA,iBAAA;AAAA,EACA,oBAAA;AAAA,EACA,OAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAA,EAA6B;AAE3B,EAAA,MAAM,cAAA,GAAiBC,aAAO,OAAO,CAAA;AACrC,EAAA,MAAM,aAAA,GAAgBA,aAAO,MAAM,CAAA;AACnC,EAAA,MAAM,iBAAA,GAAoBA,aAAO,IAAI,CAAA;AAGrC,EAAAI,gBAAU,MAAM;AACd,IAAA,IAAI,CAAC,WAAA,EAAa;AAGlB,IAAA,IAAI,kBAAkB,OAAA,EAAS;AAC7B,MAAA,iBAAA,CAAkB,OAAA,GAAU,KAAA;AAC5B,MAAA,cAAA,CAAe,OAAA,GAAU,OAAA;AACzB,MAAA,aAAA,CAAc,OAAA,GAAU,MAAA;AACxB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,WAAW,cAAA,CAAe,OAAA;AAChC,IAAA,MAAM,aAAa,CAAC,OAAA;AACpB,IAAA,MAAM,gBACJ,eAAA,CAAgB,MAAa,CAAA,KAC7B,eAAA,CAAgB,cAAc,OAAc,CAAA;AAC9C,IAAA,MAAM,WAAA,GAAc,OAAO,IAAA,CAAK,IAAA,CAAK,UAAU,MAAA,IAAU,EAAE,CAAA,CAAE,MAAA,KAAW,CAAA;AAQxE,IAAA,MAAM,eAAe,OAAA,EAAQ;AAC7B,IAAA,IAAI,cAAc,aAAA,IAAiB,WAAA,IAAe,CAAC,cAAA,CAAe,WAAW,YAAA,EAAc;AACzF,MAAA,MAAA,CAAO,MAAM,+BAAA,EAAiC;AAAA,QAC5C,QAAA;AAAA,QACA,UAAA;AAAA,QACA,aAAA;AAAA,QACA,YAAA;AAAA,QACA,SAAA,EAAW;AAAA,OACZ,CAAA;AAGD,MAAA,eAAA,CAAgB,MAAM,CAAA;AAGtB,MAAA,kBAAA,CAAmB,MAAa,CAAA;AAChC,MAAA,wBAAA,CAAyB,OAAA,GAAU,IAAA;AAGnC,MAAA,IAAI,oBAAA,EAAsB;AACxB,QAAA,oBAAA,CAAqB,MAAM,CAAA;AAAA,MAC7B;AAGA,MAAA,mBAAA,EAAoB;AACpB,MAAA,gBAAA,CAAiB,EAAE,CAAA;AACnB,MAAA,iBAAA,CAAkB,IAAI,CAAA;AAAA,IACxB;AAGA,IAAA,cAAA,CAAe,OAAA,GAAU,OAAA;AACzB,IAAA,aAAA,CAAc,OAAA,GAAU,MAAA;AAAA,EAC1B,CAAA,EAAG;AAAA,IACD,WAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAK,SAAA,CAAU,MAAA;AAAA,IACf,cAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,eAAA;AAAA,IACA,kBAAA;AAAA,IACA,wBAAA;AAAA,IACA,oBAAA;AAAA,IACA,mBAAA;AAAA,IACA,gBAAA;AAAA,IACA;AAAA,GACD,CAAA;AAGD,EAAAA,gBAAU,MAAM;AACd,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,WAAA,EAAa;AAE9B,IAAA,IACE,CAAC,OAAA,IACD,CAAC,yBAAyB,OAAA,IAC1B,CAAC,eAAe,OAAA,EAChB;AACA,MAAA,MAAM,aAAA,GAAgB,KAAK,SAAA,EAAU;AACrC,MAAA,MAAA,CAAO,KAAA;AAAA,QACL,6CAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,kBAAA,CAAmB,aAAa,CAAA;AAGhC,MAAA,IAAI,oBAAA,EAAsB;AACxB,QAAA,oBAAA,CAAqB,aAAa,CAAA;AAAA,MACpC;AAAA,IACF;AAAA,EACF,CAAA,EAAG;AAAA,IACD,OAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA;AAAA,IACA,kBAAA;AAAA,IACA,wBAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACD,CAAA;AAGD,EAAAA,gBAAU,MAAM;AACd,IAAA,IAAI,CAAC,OAAA,IAAW,MAAA,CAAO,KAAK,WAAW,CAAA,CAAE,WAAW,CAAA,EAAG;AAErD,MAAA,IAAI,CAAC,eAAe,OAAA,EAAS;AAI3B,QAAA,qBAAA,CAAsB,QAAQ,KAAA,EAAM;AAAA,MACtC;AAAA,IACF;AAAA,EACF,CAAA,EAAG;AAAA,IACD,OAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA,wBAAA;AAAA,IACA,qBAAA;AAAA,IACA;AAAA,GACD,CAAA;AAGD,EAAAA,gBAAU,MAAM;AACd,IAAA,IAAI,SAAA,CAAU,OAAA,KAAY,MAAA,IAAU,SAAA,CAAU,YAAY,MAAA,EAAQ;AAChE,MAAA,UAAA,CAAW,MAAM;AACf,QAAA,qBAAA,CAAsB,QAAQ,KAAA,EAAM;AACpC,QAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AAAA,MACtB,GAAG,GAAG,CAAA;AAAA,IACR,CAAA,MAAA,IAAW,SAAA,CAAU,OAAA,KAAY,IAAA,EAAM;AACrC,MAAA,qBAAA,CAAsB,QAAQ,KAAA,EAAM;AAAA,IACtC;AAAA,EACF,CAAA,EAAG,CAAC,SAAA,EAAW,qBAAqB,CAAC,CAAA;AAGrC,EAAAA,gBAAU,MAAM;AACd,IAAA,IAAI,eAAe,OAAA,EAAS;AAC1B,MAAA,MAAA,CAAO,MAAM,uCAAuC,CAAA;AACpD,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,SAAA,CAAU,YAAY,QAAA,EAAU;AAClC,MAAA,MAAA,CAAO,MAAM,0CAA0C,CAAA;AACvD,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,MAAA,CAAO,MAAM,oCAAoC,CAAA;AACjD,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,OAAA,IAAW,CAAC,wBAAA,CAAyB,OAAA,EAAS;AAChD,MAAA,MAAA,CAAO,MAAM,8CAA8C,CAAA;AAC3D,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,UAAA,GACJ,SAAA,CAAU,OAAA,KAAY,MAAA,IAAU,UAAU,OAAA,KAAY,MAAA;AACxD,IAAA,MAAM,iBAAiB,MAAA,CAAO,IAAA,CAAK,WAAW,CAAA,CAAE,SAAS,CAAA,IAAK,OAAA;AAE9D,IAAA,IAAI,UAAA,IAAc,WAAA,IAAe,CAAC,gBAAA,EAAkB;AAClD,MAAA,MAAA,CAAO,MAAM,2CAAA,EAA6C;AAAA,QACxD,cAAA,EAAgB,KAAA,CAAM,IAAA,CAAK,qBAAA,CAAsB,OAAO;AAAA,OACzD,CAAA;AAGD,MAAA,iBAAA,CAAkB,IAAI,CAAA;AAEtB,MAAA,UAAA,CAAW,MAAM;AACf,QAAA,MAAM,aAAA,GAAgB,KAAK,SAAA,EAAU;AACrC,QAAA,MAAM,kBAAA,GAAqB,KAAK,SAAA,CAAU,WAAA;AAC1C,QAAA,aAAA,CAAc,aAAA,EAAoB,oBAAoB,IAAI,CAAA;AAAA,MAC5D,GAAG,EAAE,CAAA;AACL,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,cAAc,cAAA,EAAgB;AAEjC,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,IAAA,CAAK,SAAA;AACzB,QAAA,MAAM,gBAAgB,UAAA,CAAW;AAAA,UAC/B,MAAA;AAAA,UACA,OAAA;AAAA,UACA,OAAA;AAAA,UACA;AAAA,SACD,CAAA;AAED,QAAA,IAAI,CAAC,aAAA,EAAe;AAClB,UAAA,MAAA,CAAO,MAAM,2CAAA,EAA6C;AAAA,YACxD,WAAA,EAAa,MAAA,CAAO,IAAA,CAAK,WAAW,CAAA;AAAA,YACpC,OAAA;AAAA,YACA;AAAA,WACD,CAAA;AACD,UAAA;AAAA,QACF;AAAA,MACF;AAEA,MAAA,MAAA,CAAO,MAAM,kCAAA,EAAoC;AAAA,QAC/C,WAAA,EAAa,MAAA,CAAO,IAAA,CAAK,WAAW,CAAA;AAAA,QACpC;AAAA,OACD,CAAA;AACD,MAAA,aAAA,CAAc,MAAA,EAAQ,aAAa,KAAK,CAAA;AAAA,IAC1C;AAAA,EACF,CAAA,EAAG;AAAA,IACD,MAAA;AAAA,IACA,WAAA;AAAA,IACA,OAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,WAAA;AAAA,IACA,gBAAA;AAAA,IACA,IAAA;AAAA,IACA,cAAA;AAAA,IACA,wBAAA;AAAA,IACA,SAAA;AAAA,IACA,qBAAA;AAAA,IACA;AAAA,GACD,CAAA;AAGD,EAAAA,gBAAU,MAAM;AACd,IAAA,IAAI,OAAO,IAAA,CAAK,WAAW,EAAE,MAAA,KAAW,CAAA,IAAK,CAAC,OAAA,EAAS;AACrD,MAAA,eAAA,CAAgB,KAAA,EAAM;AACtB,MAAA,gBAAA,CAAiB,EAAE,CAAA;AAEnB,MAAA,qBAAA,CAAsB,QAAQ,KAAA,EAAM;AAAA,IACtC;AAAA,EACF,CAAA,EAAG;AAAA,IACD,WAAA;AAAA,IACA,OAAA;AAAA,IACA,eAAA;AAAA,IACA,gBAAA;AAAA,IACA;AAAA,GACD,CAAA;AAGD,EAAAA,gBAAU,MAAM;AACd,IAAA,OAAO,MAAM;AAAA,IAEb,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AACP;;;ACxSO,SAAS,eACd,OAAA,EACgB;AAvClB,EAAA,IAAA,EAAA;AAwCE,EAAA,MAAM;AAAA,IACJ,IAAA;AAAA,IACA,SAAA,EAAW,aAAA;AAAA,IACX,SAAS,EAAC;AAAA,IACV,aAAA,EAAe,iBAAA;AAAA,IACf,UAAA,EAAY,cAAA;AAAA,IACZ,OAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,kBAAA,GAAqB,SAAA;AAAA,IACrB,OAAA;AAAA,IACA,IAAA;AAAA,IACA,WAAA,GAAc;AAAA,GAChB,GAAI,OAAA;AAEJ,EAAA,MAAM,WAAA,GAAc,CAAC,EAAC,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,OAAA,CAAA;AAC5B,EAAA,MAAM,gBAAA,GAAA,CAAmB,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,gBAAA,KAAN,IAAA,GAAA,EAAA,GAA0B,KAAA;AAGnD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAID,gBAAAA,CAAW,iBAAiB,oBAAoB,CAAA;AAC1E,EAAA,MAAM,kBAAkBK,aAAAA,CAAQ,MAAM,IAAI,eAAA,EAAgB,EAAG,EAAE,CAAA;AAC/D,EAAA,MAAM,eAAeA,aAAAA,CAAQ,MAAM,IAAI,YAAA,EAAa,EAAG,EAAE,CAAA;AACzD,EAAA,MAAM,UAAUA,aAAAA,CAAQ,MAAM,IAAI,gBAAA,EAAiB,EAAG,EAAE,CAAA;AACxD,EAAA,MAAM,MAAA,GAASA,aAAAA;AAAA,IACb,MAAM,YAAA,CAAa,KAAA,EAAO,MAAA,CAAO,KAAK,CAAA;AAAA,IACtC,CAAC,OAAO,KAAK;AAAA,GACf;AAGA,EAAA,MAAM,MAAA,GAAS,KAAK,KAAA,EAAM;AAC1B,EAAA,MAAM,EAAE,OAAA,EAAS,OAAA,EAAS,WAAA,EAAa,YAAA,KAAiB,IAAA,CAAK,SAAA;AAG7D,EAAA,MAAM,WAAW,WAAA,CAAY,IAAA,EAAM,OAAA,EAAS,WAAA,EAAa,OAAO,KAAK,CAAA;AAGrE,EAAA,MAAM,OAAA,GAAUA,aAAAA;AAAA,IACd,MACE,IAAI,eAAA;AAAA,MACF,aAAa,EAAE,EAAA,EAAI,IAAA,EAAK,CAAA;AAAA;AAAA,MACxB,OAAO,UAAA,IAAc,GAAA;AAAA,MACrB;AAAA,KACF;AAAA,IACF,CAAC,MAAA,CAAO,UAAA,EAAY,MAAM;AAAA,GAC5B;AAGA,EAAA,MAAM,YAAA,GAAe,eAAA;AAAA,IACnB,IAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA,CAAS,cAAA;AAAA,IACT,gBAAA;AAAA,IACA,MAAA,CAAO;AAAA,GACT;AAGA,EAAA,MAAM,uBAAA,GAA0BA,aAAAA;AAAA,IAC9B,MACE,gCAAA,CAIA,CAAA;AAAA,IACF,CAAC,WAAW;AAAA,GACd;AAGA,EAAA,MAAM,aAAA,GAAgBA,cAAQ,MAAM;AAClC,IAAA,IAAI,mBAAmB,OAAO,iBAAA;AAC9B,IAAA,OAAO,0BAAA;AAAA,MACL,uBAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA,CAAS,WAAA;AAAA,MACT,EAAE,SAAS,IAAA;AAAK;AAAA,KAClB;AAAA,EACF,CAAA,EAAG;AAAA,IACD,iBAAA;AAAA,IACA,uBAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA,CAAS;AAAA,GACV,CAAA;AAGD,EAAA,MAAM,UAAA,GAAaA,cAAQ,MAAM;AAC/B,IAAA,IAAI,gBAAgB,OAAO,cAAA;AAC3B,IAAA,OAAO,uBAAA;AAAA,MACL,uBAAA;AAAA,MACA,QAAA,CAAS,WAAA;AAAA,MACT,EAAE,SAAS,IAAA;AAAK;AAAA,KAClB;AAAA,EACF,GAAG,CAAC,cAAA,EAAgB,uBAAA,EAAyB,QAAA,CAAS,WAAW,CAAC,CAAA;AAGlE,EAAA,MAAM,oBAAoB,gBAAA,CAAiB;AAAA,IACzC,IAAA;AAAA,IACA,OAAA;AAAA,IACA,eAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,kBAAA;AAAA,IACA,gBAAgB,QAAA,CAAS,cAAA;AAAA,IACzB,uBAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA,IACA,MAAA;AAAA,IACA,GAAG,YAAA;AAAA,IACH,aAAa,QAAA,CAAS,WAAA;AAAA,IACtB,SAAA,EAAW,EAAE,OAAA,EAAS,IAAA;AAAK;AAAA,GAC5B,CAAA;AAGD,EAAA,MAAM,QAAA,GAAW,WAAA;AAAA,IACf,IAAA;AAAA,IACA,IAAA;AAAA,IACA,gBAAA;AAAA,IACA,QAAA,CAAS,cAAA;AAAA,IACT,iBAAA,CAAkB,aAAA;AAAA,IAClB,UAAA;AAAA,IACA,MAAA,CAAO,KAAA;AAAA,IACP;AAAA,MACE,gBAAgB,QAAA,CAAS,kBAAA;AAAA,MACzB,sBAAsB,YAAA,CAAa;AAAA;AACrC,GACF;AAGA,EAAA,MAAM,iBAAA,GAAoBA,aAAAA;AAAA,IACxB,MACE,uBAAA,CAAwB;AAAA,MACtB,aAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,MACA,gBAAgB,QAAA,CAAS,cAAA;AAAA,MACzB,WAAA;AAAA,MACA,YAAY,QAAA,CAAS,UAAA;AAAA,MACrB,OAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAA;AAAA,MACA,aAAa,QAAA,CAAS,WAAA;AAAA,MACtB,WAAW,QAAA,CAAS,SAAA;AAAA,MACpB,uBAAuB,QAAA,CAAS,qBAAA;AAAA,MAChC,QAAA;AAAA,MACA,IAAA;AAAA,MACA,sBAAsB,YAAA,CAAa,oBAAA;AAAA,MACnC,gBAAgB,QAAA,CAAS,cAAA;AAAA,MACzB,sBAAsB,YAAA,CAAa;AAAA,KACpC,CAAA;AAAA,IACH;AAAA,MACE,aAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA,CAAS,cAAA;AAAA,MACT,WAAA;AAAA,MACA,QAAA,CAAS,UAAA;AAAA,MACT,OAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAA;AAAA,MACA,QAAA,CAAS,WAAA;AAAA,MACT,QAAA,CAAS,SAAA;AAAA,MACT,QAAA,CAAS,qBAAA;AAAA,MACT,IAAA;AAAA,MACA,YAAA,CAAa,oBAAA;AAAA,MACb,QAAA,CAAS,cAAA;AAAA,MACT,YAAA,CAAa,oBAAA;AAAA,MACb;AAAA;AACF,GACF;AAGA,EAAAJ,gBAAU,MAAM;AACd,IAAC,QAAgB,SAAA,GAAY,iBAAA;AAAA,EAC/B,CAAA,EAAG,CAAC,OAAA,EAAS,iBAAiB,CAAC,CAAA;AAG/B,EAA2BI,cAAQ,MAAM;AACvC,IAAA,IAAI,mBAAmB,OAAO,iBAAA;AAC9B,IAAA,OAAO,0BAAA;AAAA,MACL,uBAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA,CAAS,WAAA;AAAA,MACT,QAAA,CAAS;AAAA,KACX;AAAA,EACF,CAAA,EAAG;AAAA,IACD,iBAAA;AAAA,IACA,uBAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA,CAAS,WAAA;AAAA,IACT,QAAA,CAAS;AAAA,GACV;AAED,EAAA,MAAM,eAAA,GAAkBA,cAAQ,MAAM;AACpC,IAAA,IAAI,gBAAgB,OAAO,cAAA;AAC3B,IAAA,OAAO,uBAAA;AAAA,MACL,uBAAA;AAAA,MACA,QAAA,CAAS,WAAA;AAAA,MACT,QAAA,CAAS;AAAA,KACX;AAAA,EACF,CAAA,EAAG;AAAA,IACD,cAAA;AAAA,IACA,uBAAA;AAAA,IACA,QAAA,CAAS,WAAA;AAAA,IACT,QAAA,CAAS;AAAA,GACV,CAAA;AAGD,EAAA,kBAAA,CAAmB;AAAA,IACjB,IAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,WAAA;AAAA,IACA,gBAAA;AAAA,IACA,eAAA;AAAA,IACA,eAAe,iBAAA,CAAkB,aAAA;AAAA,IACjC,UAAA,EAAY,eAAA;AAAA,IACZ,gBAAgB,QAAA,CAAS,cAAA;AAAA,IACzB,0BAA0B,QAAA,CAAS,wBAAA;AAAA,IACnC,WAAW,QAAA,CAAS,SAAA;AAAA,IACpB,uBAAuB,QAAA,CAAS,qBAAA;AAAA,IAChC,mBAAmB,QAAA,CAAS,iBAAA;AAAA,IAC5B,oBAAoB,QAAA,CAAS,kBAAA;AAAA,IAC7B,eAAe,QAAA,CAAS,aAAA;AAAA,IACxB,mBAAmB,YAAA,CAAa,iBAAA;AAAA,IAChC,qBAAqB,YAAA,CAAa,mBAAA;AAAA,IAClC,kBAAkB,YAAA,CAAa,gBAAA;AAAA,IAC/B,mBAAmB,YAAA,CAAa,iBAAA;AAAA,IAChC,sBAAsB,YAAA,CAAa,oBAAA;AAAA,IACnC,SAAS,YAAA,CAAa,OAAA;AAAA,IACtB,WAAA;AAAA,IACA,0BAA0B,QAAA,CAAS,wBAAA;AAAA,IACnC,iBAAiB,QAAA,CAAS,eAAA;AAAA,IAC1B,YAAY,QAAA,CAAS;AAAA,GACtB,CAAA;AAGD,EAAAJ,gBAAU,MAAM;AACd,IAAA,OAAO,MAAM;AACX,MAAA,YAAA,CAAa,oBAAA,EAAqB;AAClC,MAAA,OAAA,CAAQ,KAAA,EAAM;AAAA,IAChB,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,OAAA,EAAS,YAAY,CAAC,CAAA;AAG1B,EAAA,OAAO;AAAA;AAAA,IAEL,UAAU,KAAA,CAAM,QAAA;AAAA,IAChB,WAAW,KAAA,CAAM,SAAA;AAAA,IACjB,SAAS,KAAA,CAAM,OAAA;AAAA;AAAA,IAGf,iBAAA,EAAmB,aAAa,wBAAA,EAAyB;AAAA;AAAA,IAGzD,OAAO,iBAAA,CAAkB,SAAA;AAAA;AAAA,IACzB,OAAO,YAAA,CAAa,KAAA;AAAA,IACpB,WAAW,iBAAA,CAAkB,SAAA;AAAA;AAAA,IAG7B,qBAAqB,QAAA,CAAS,mBAAA;AAAA,IAC9B,aAAa,QAAA,CAAS,WAAA;AAAA,IACtB,uBAAuB,QAAA,CAAS,qBAAA;AAAA;AAAA,IAGhC,UAAA,EAAYH,kBAAY,MAAM,OAAA,CAAQ,YAAW,EAAG,CAAC,OAAO,CAAC,CAAA;AAAA,IAC7D,aAAA,EAAeA,iBAAAA;AAAA,MACb,OAAO;AAAA,QACL,mBAAA,EAAqB,gBAAgB,IAAA,EAAK;AAAA,QAC1C,gBAAA,EAAkB,aAAa,IAAA;AAAK,OACtC,CAAA;AAAA,MACA,CAAC,iBAAiB,YAAY;AAAA,KAChC;AAAA,IACA,mBAAmB,YAAA,CAAa,iBAAA;AAAA,IAChC,SAAS,YAAA,CAAa,OAAA;AAAA;AAAA,IAGtB,IAAA,EAAM,SAAS,OAAA,CAAQ,IAAA;AAAA,IACvB,IAAA,EAAM,SAAS,OAAA,CAAQ,IAAA;AAAA,IACvB,YAAA,EAAc,SAAS,OAAA,CAAQ,YAAA;AAAA,IAC/B,OAAA,EAAS,SAAS,OAAA,CAAQ,OAAA;AAAA,IAC1B,OAAA,EAAS,SAAS,OAAA,CAAQ,OAAA;AAAA;AAAA,IAG1B,mBAAmB,QAAA,CAAS;AAAA,GAC9B;AACF;;;ACrTO,SAAS,cAAmD,QAAA,EAErD;AACZ,EAAA,OAAO,OAAO,SAAS,GAAA,KAAQ;AAC7B,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,QAAA,CAAS,WAAA,CAAY,OAAA,EAAmB;AAAA,QACxD,QAAQ,GAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAK;AAAA,OACd,CAAA;AAGD,MAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,OAAA,EAAU,2BAAa,OAAA,EAAQ;AAAA,IACpD,SAAS,CAAA,EAAQ;AAEf,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,KAAA,EAAO,aAAa,KAAA,GAAQ,CAAA,GAAI,IAAI,KAAA,CAAM,MAAA,CAAO,CAAC,CAAC;AAAA,OACrD;AAAA,IACF;AAAA,EACF,CAAA;AACF;;;ACvBO,SAAS,SAAA,CACd,SAAA,EACA,MAAA,GAA+B,IAC/B,MAAA,EACW;AACX,EAAA,MAAM;AAAA,IACJ,UAAA,GAAa,CAAA;AAAA,IACb,WAAA,GAAc,GAAA;AAAA,IACd,UAAA,GAAa,GAAA;AAAA,IACb,aAAA,GAAgB;AAAA,GAClB,GAAI,MAAA;AAEJ,EAAA,OAAO,OACL,SACA,GAAA,KACwB;AA/B5B,IAAA,IAAA,EAAA;AAgCI,IAAA,IAAI,SAAA;AACJ,IAAA,MAAM,UAAA,GAAA,CAAa,2BAAK,UAAA,KAAc,CAAA;AAEtC,IAAA,KAAA,IAAS,OAAA,GAAU,CAAA,EAAG,OAAA,IAAW,UAAA,EAAY,OAAA,EAAA,EAAW;AACtD,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU,OAAA,EAAS;AAAA,UACtC,GAAG,GAAA;AAAA,UACH,YAAY,UAAA,GAAa;AAAA,SAC1B,CAAA;AAED,QAAA,IAAI,OAAO,EAAA,EAAI;AACb,UAAA,IAAI,UAAU,CAAA,EAAG;AACf,YAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,IAAA,CAAK,6BAA6B,OAAO,CAAA,QAAA,CAAA,CAAA;AAAA,UACnD;AACA,UAAA,OAAO,MAAA;AAAA,QACT,CAAA,MAAO;AACL,UAAA,SAAA,GAAY,MAAA,CAAO,KAAA;AACnB,UAAA,IAAI,YAAY,UAAA,EAAY;AAAA,QAC9B;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,SAAA,GAAY,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AACpE,QAAA,IAAI,YAAY,UAAA,EAAY;AAAA,MAC9B;AAEA,MAAA,IAAA,CAAI,EAAA,GAAA,GAAA,IAAA,IAAA,GAAA,MAAA,GAAA,GAAA,CAAK,MAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,OAAA,EAAS;AACxB,QAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,OAAO,IAAI,cAAA,CAAe,mBAAmB,CAAA,EAAE;AAAA,MACrE;AAEA,MAAA,MAAM,QAAQ,IAAA,CAAK,GAAA;AAAA,QACjB,WAAA,GAAc,IAAA,CAAK,GAAA,CAAI,aAAA,EAAe,OAAO,CAAA;AAAA,QAC7C;AAAA,OACF;AAEA,MAAA,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,KAAA;AAAA,QACN,CAAA,kBAAA,EAAqB,OAAA,GAAU,CAAC,CAAA,qBAAA,EAAwB,KAAK,CAAA,EAAA;AAAA,OAAA;AAE/D,MAAA,MAAM,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,KAAK,CAAC,CAAA;AAAA,IAC3D;AAEA,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,OAAO,IAAI,cAAA;AAAA,QACT,CAAA,uBAAA,EAA0B,aAAa,CAAC,CAAA,SAAA,CAAA;AAAA,QACxC;AAAA;AACF,KACF;AAAA,EACF,CAAA;AACF;;;ACxEO,SAAS,qBAAqB,UAAA,EAAoC;AACvE,EAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,IAAA,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAAA,EACtD;AAEA,EAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,IAAA,OAAO,WAAW,CAAC,CAAA;AAAA,EACrB;AAEA,EAAA,OAAO,OACL,SACA,GAAA,KACwB;AACxB,IAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,MAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU,OAAA,EAAS,GAAG,CAAA;AAC3C,MAAA,IAAI,CAAC,OAAO,EAAA,EAAI;AACd,QAAA,OAAO,MAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,OAAO,EAAE,IAAI,IAAA,EAAK;AAAA,EACpB,CAAA;AACF;AAEO,SAAS,sBAAsB,UAAA,EAAoC;AACxE,EAAA,OAAO,OACL,SACA,GAAA,KACwB;AACxB,IAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,UAAA;AAAA,MAC5B,WAAW,GAAA,CAAI,CAAC,cAAc,SAAA,CAAU,OAAA,EAAS,GAAG,CAAC;AAAA,KACvD;AAEA,IAAA,MAAM,WAAoB,EAAC;AAE3B,IAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,MAAA,IAAI,MAAA,CAAO,WAAW,UAAA,EAAY;AAChC,QAAA,QAAA,CAAS,IAAA,CAAK,OAAO,MAAM,CAAA;AAAA,MAC7B,CAAA,MAAA,IAAW,CAAC,MAAA,CAAO,KAAA,CAAM,EAAA,EAAI;AAC3B,QAAA,QAAA,CAAS,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA;AAAA,MAClC;AAAA,IACF;AAEA,IAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,OAAO,IAAI,KAAA;AAAA,UACT,CAAA,EAAG,QAAA,CAAS,MAAM,CAAA,oBAAA,EAAuB,QAAA,CACtC,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,CAAA,CACpB,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA;AACf,OACF;AAAA,IACF;AAEA,IAAA,OAAO,EAAE,IAAI,IAAA,EAAK;AAAA,EACpB,CAAA;AACF;;;ACvDO,SAAS,SACd,IAAA,EACA,MAAA,EACA,QAAQ,EAAE,UAAA,EAAY,cAAa,EACb;AACtB,EAAA,IAAI,SAAA,GAAkD,IAAA;AACtD,EAAA,IAAI,QAAA,GAAiC,IAAA;AAErC,EAAA,MAAM,WAAA,GAAc,IAAI,IAAA,KAA8B;AACpD,IAAA,QAAA,GAAW,IAAA;AAEX,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,KAAA,CAAM,aAAa,SAAS,CAAA;AAAA,IAC9B;AAEA,IAAA,SAAA,GAAY,KAAA,CAAM,WAAW,MAAM;AACjC,MAAA,SAAA,GAAY,IAAA;AACZ,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,IAAA,CAAK,GAAG,QAAQ,CAAA;AAChB,QAAA,QAAA,GAAW,IAAA;AAAA,MACb;AAAA,IACF,GAAG,MAAM,CAAA;AAAA,EACX,CAAA;AAEA,EAAA,WAAA,CAAY,SAAS,MAAY;AAC/B,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,KAAA,CAAM,aAAa,SAAS,CAAA;AAC5B,MAAA,SAAA,GAAY,IAAA;AAAA,IACd;AACA,IAAA,QAAA,GAAW,IAAA;AAAA,EACb,CAAA;AAEA,EAAA,WAAA,CAAY,QAAQ,MAAiC;AACnD,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,KAAA,CAAM,aAAa,SAAS,CAAA;AAC5B,MAAA,SAAA,GAAY,IAAA;AAAA,IACd;AAEA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAG,QAAQ,CAAA;AAC/B,MAAA,QAAA,GAAW,IAAA;AACX,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AAEA,EAAA,WAAA,CAAY,UAAU,MAAe;AACnC,IAAA,OAAO,SAAA,KAAc,IAAA;AAAA,EACvB,CAAA;AAEA,EAAA,OAAO,WAAA;AACT;;;ACpDO,SAAS,oBACd,SAAA,GAA0B,CAAC,EAAE,EAAA,EAAI,IAAA,EAAM,CAAA,EACQ;AAC/C,EAAA,MAAM,QAAuB,EAAC;AAC9B,EAAA,IAAI,SAAA,GAAY,CAAA;AAEhB,EAAA,MAAM,SAAA,GAAuB,OAAO,OAAA,KAAY;AAC9C,IAAA,KAAA,CAAM,KAAK,OAAO,CAAA;AAClB,IAAA,MAAM,QAAA,GAAW,UAAU,IAAA,CAAK,GAAA,CAAI,WAAW,SAAA,CAAU,MAAA,GAAS,CAAC,CAAC,CAAA;AACpE,IAAA,SAAA,EAAA;AACA,IAAA,OAAO,QAAA;AAAA,EACT,CAAA;AAEA,EAAA,OAAO,MAAA,CAAO,OAAO,SAAA,EAAW;AAAA,IAC9B,QAAA,EAAU,MAAM,CAAC,GAAG,KAAK;AAAA,GAC1B,CAAA;AACH;AAQO,SAAS,cAAA,CACd,SAAA,GAAoC,EAAC,EACtB;AAEf,EAAA,MAAM,YAAA,IAAgB,CAAC,IAAA,KAAc;AAEnC,IAAA,OAAO;AAAA,MACL,IAAA;AAAA,MACA,QAAA,EAAU,KAAK,EAAA,EAAG;AAAA,MAClB,MAAA,EAAQ,KAAK,EAAA,EAAG;AAAA,MAChB,GAAA,EAAK,KAAK,EAAA;AAAG,KACf;AAAA,EACF,CAAA,CAAA;AAGA,EAAA,MAAM,aAAA,IAAiB,CAAC,IAAA,KAAe;AAErC,IAAA,IAAI,OAAO,IAAA,KAAS,QAAA,EAAU,OAAO,MAAA;AAErC,IAAA,OAAO,EAAC;AAAA,EACV,CAAA,CAAA;AAGA,EAAA,MAAM,eAAe,IAAA,CAAK,EAAA,CAAG,CAAC,CAAA,EAAQ,IAAS,GAAA,KAAc;AAAA,EAE7D,CAAC,CAAA;AAGD,EAAA,MAAM,YAAY,IAAA,CAAK,EAAA;AAAA,IACrB,CAAC,OAAY,EAAC;AAAA,GAChB;AAEA,EAAA,MAAM,cAAc,IAAA,CAAK,EAAA;AAAA,IAAG,MAC1B,OAAA,CAAQ,OAAA,CAAQ,IAAI;AAAA,GACtB;AAEA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,SAAA;AAAA,IACP,SAAA,EAAW;AAAA,MACT,OAAA,EAAS,KAAA;AAAA,MACT,OAAA,EAAS,IAAA;AAAA,MACT,aAAa,EAAC;AAAA,MACd,YAAA,EAAc;AAAA,KAChB;AAAA;AAAA,IAEA,KAAA,EAAO,KAAK,EAAA,EAAG;AAAA,IACf,OAAA,EAAS,WAAA;AAAA;AAAA,IAGT,SAAA,EAAW,aAAA;AAAA,IACX,QAAA,EAAU,YAAA;AAAA,IACV,QAAA,EAAU,YAAA;AAAA;AAAA,IAGV,GAAG;AAAA,GACL;AACF;AAKO,IAAM,YAAN,MAAgB;AAAA,EAAhB,WAAA,GAAA;AACL,IAAA,IAAA,CAAQ,MAAA,uBAAa,GAAA,EAAqD;AAC1E,IAAA,IAAA,CAAQ,MAAA,GAAS,CAAA;AAEjB,IAAA,IAAA,CAAA,UAAA,GAAa,CAAC,UAAsB,KAAA,KAA0B;AAC5D,MAAA,MAAM,KAAK,IAAA,CAAK,MAAA,EAAA;AAChB,MAAA,IAAA,CAAK,OAAO,GAAA,CAAI,EAAA,EAAI,EAAE,QAAA,EAAU,OAAO,CAAA;AACvC,MAAA,OAAO,EAAA;AAAA,IACT,CAAA;AAEA,IAAA,IAAA,CAAA,YAAA,GAAe,CAAC,EAAA,KAAqB;AACnC,MAAA,IAAA,CAAK,MAAA,CAAO,OAAO,EAAE,CAAA;AAAA,IACvB,CAAA;AAEA,IAAA,IAAA,CAAA,IAAA,GAAO,CAAC,EAAA,KAAqB;AAC3B,MAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,KAAK,IAAA,CAAK,MAAA,CAAO,SAAQ,EAAG;AAC/C,QAAA,IAAI,KAAA,CAAM,SAAS,EAAA,EAAI;AACrB,UAAA,KAAA,CAAM,QAAA,EAAS;AACf,UAAA,IAAA,CAAK,MAAA,CAAO,OAAO,EAAE,CAAA;AAAA,QACvB,CAAA,MAAO;AACL,UAAA,KAAA,CAAM,KAAA,IAAS,EAAA;AAAA,QACjB;AAAA,MACF;AAAA,IACF,CAAA;AAEA,IAAA,IAAA,CAAA,KAAA,GAAQ,MAAY;AAClB,MAAA,MAAM,SAAA,GAAY,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,CAAA;AACxE,MAAA,IAAA,CAAK,OAAO,KAAA,EAAM;AAClB,MAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,EAAA,KAAO,EAAA,EAAI,CAAA;AAAA,IAChC,CAAA;AAEA,IAAA,IAAA,CAAA,gBAAA,GAAmB,MAAe;AAChC,MAAA,OAAO,IAAA,CAAK,OAAO,IAAA,GAAO,CAAA;AAAA,IAC5B,CAAA;AAAA,EAAA;AACF;AAEO,SAAS,QAAQ,EAAA,EAA2B;AACjD,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,EAAE,CAAC,CAAA;AACzD;AAEA,eAAsB,gBAAA,CACpB,SAAA,EACA,SAAA,GAAY,GAAA,EACZ,aAAa,EAAA,EACE;AACf,EAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,EAAI;AAEvB,EAAA,OAAO,CAAC,SAAA,EAAU,IAAK,KAAK,GAAA,EAAI,GAAI,QAAQ,SAAA,EAAW;AACrD,IAAA,MAAM,QAAQ,UAAU,CAAA;AAAA,EAC1B;AAEA,EAAA,IAAI,CAAC,WAAU,EAAG;AAChB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,SAAS,CAAA,EAAA,CAAI,CAAA;AAAA,EAC3D;AACF;;;AC5IO,SAAS,SAAA,CACd,IAAA,EACA,YAAA,EACA,IAAA,EACS;AACT,EAAA,MAAM,UAAU,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,gBAAA,CAAiB,SAAS,IAAI,CAAA;AAC5D,EAAA,OAAO,CAAC,IAAA,CAAK,SAAA,CAAU,YAAA,EAAc,OAAO,CAAA;AAC9C;AAEO,SAAS,qBAAA,CACd,IAAA,EACA,YAAA,EACA,OAAA,EACA,IAAA,EACA;AACA,EAAA,IAAI,SAAA,CAAU,IAAA,EAAM,YAAA,EAAc,IAAI,CAAA,EAAG;AACvC,IAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAAA,EAClB,CAAA,MAAO;AACL,IAAA,OAAA,CAAQ,OAAO,IAAI,CAAA;AAAA,EACrB;AACF","file":"index.cjs","sourcesContent":["export class AutosaveError extends Error {\n  constructor(\n    message: string,\n    public code: string,\n    public originalError?: Error,\n    public metadata?: Record<string, any>\n  ) {\n    super(message);\n    this.name = \"AutosaveError\";\n  }\n\n  static fromUnknown(error: unknown, code = \"UNKNOWN_ERROR\"): AutosaveError {\n    if (error instanceof AutosaveError) return error;\n\n    const originalError =\n      error instanceof Error ? error : new Error(String(error));\n    return new AutosaveError(\n      `Autosave failed: ${originalError.message}`,\n      code,\n      originalError\n    );\n  }\n}\n\nexport class TransportError extends AutosaveError {\n  constructor(message: string, originalError?: Error) {\n    super(message, \"TRANSPORT_ERROR\", originalError);\n  }\n}\n\nexport class ValidationError extends AutosaveError {\n  constructor(message: string, public failedFields?: string[]) {\n    super(message, \"VALIDATION_ERROR\", undefined, { failedFields });\n  }\n}\n\nexport class DiffError extends AutosaveError {\n  constructor(message: string, public field?: string, originalError?: Error) {\n    super(message, \"DIFF_ERROR\", originalError, { field });\n  }\n}\n","import type { SavePayload, SaveResult, Transport, SaveContext } from \"./types\";\nimport { AutosaveError } from \"./errors\";\nimport type { Logger } from \"../utils/logger\";\n\nexport interface AutosaveManagerOptions {\n  transport: Transport;\n  debounceMs?: number;\n  logger?: Logger;\n  timer?: { setTimeout: typeof setTimeout; clearTimeout: typeof clearTimeout };\n}\n\nexport class AutosaveManager {\n  private pending: SavePayload = {};\n  private isInflight = false;\n  private shouldRerun = false;\n  private abortController: AbortController | null = null;\n  private retryCount = 0;\n  private readonly maxRetries = 3;\n\n  constructor(\n    private readonly transport: Transport,\n    private readonly debounceMs = 600, // Keep for backward compatibility but won't use internal debouncing\n    private readonly logger?: Logger,\n    private readonly timer = { setTimeout, clearTimeout }\n  ) {}\n\n  queueChange(delta: SavePayload): void {\n    this.logger?.debug(\"Queueing change\", {\n      delta,\n      currentPending: this.pending,\n    });\n\n    // Merge changes instead of replacing\n    Object.keys(delta).forEach((key) => {\n      this.pending[key] = (delta as any)[key];\n    });\n\n    // FIX: Immediately flush since debouncing is handled at the React level\n    // void this.flush();\n  }\n\n  async flush(): Promise<SaveResult> {\n    if (this.isEmpty()) {\n      return { ok: true };\n    }\n\n    if (this.isInflight) {\n      this.shouldRerun = true;\n      this.logger?.debug(\"Flush requested while save in progress, will rerun\");\n      return { ok: true };\n    }\n\n    const payload = this.takePendingPayload();\n    this.isInflight = true;\n    this.abortController = new AbortController();\n\n    const startTime = performance.now();\n\n    try {\n      this.logger?.debug(\"Starting save\", { payload });\n\n      const context: SaveContext = {\n        signal: this.abortController.signal,\n        timestamp: Date.now(),\n        retryCount: this.retryCount,\n      };\n\n      const result = await this.transport(payload, context);\n\n      const duration = performance.now() - startTime;\n      this.logger?.debug(\"Save completed\", { result, duration });\n\n      if (result.ok) {\n        this.retryCount = 0;\n      } else {\n        this.handleFailure(payload, result.error);\n      }\n\n      return result;\n    } catch (error) {\n      const duration = performance.now() - startTime;\n      const autosaveError = AutosaveError.fromUnknown(error, \"TRANSPORT_ERROR\");\n\n      this.logger?.error(\"Save failed\", autosaveError, { payload, duration });\n      this.handleFailure(payload, autosaveError);\n\n      return { ok: false, error: autosaveError };\n    } finally {\n      this.isInflight = false;\n      this.abortController = null;\n\n      if (this.shouldRerun) {\n        this.shouldRerun = false;\n        // Immediately try again if there are pending changes\n        void this.flush();\n      }\n    }\n  }\n\n  abort(): void {\n    this.logger?.debug(\"Aborting autosave\");\n    this.pending = {};\n    this.shouldRerun = false;\n    this.abortController?.abort();\n  }\n\n  isEmpty(): boolean {\n    return Object.keys(this.pending).length === 0;\n  }\n\n  getPendingChanges(): Readonly<SavePayload> {\n    return { ...this.pending };\n  }\n\n  private takePendingPayload(): SavePayload {\n    const payload = this.pending;\n    this.pending = {};\n    return payload;\n  }\n\n  private handleFailure(payload: SavePayload, error: Error): void {\n    // On failure, merge failed payload back with any new pending changes\n    const newPending: SavePayload = { ...payload };\n\n    // Merge in any changes that came in during the failed request\n    Object.keys(this.pending).forEach((key) => {\n      newPending[key] = this.pending[key];\n    });\n\n    this.pending = newPending;\n    this.retryCount++;\n\n    if (this.retryCount <= this.maxRetries) {\n      this.logger?.warn(\n        `Save failed, will retry (${this.retryCount}/${this.maxRetries})`,\n        { error }\n      );\n    } else {\n      this.logger?.error(`Save failed after ${this.maxRetries} retries`, error);\n    }\n  }\n}\n","import type { AutosaveState, AutosaveAction } from \"./types\";\n\nexport const initialAutosaveState: AutosaveState = {\n  isSaving: false,\n  lastError: null,\n  baseline: null,\n  isBaselineInitialized: false,\n  config: {},\n  metrics: {\n    totalSaves: 0,\n    successfulSaves: 0,\n    failedSaves: 0,\n    averageSaveTime: 0,\n  },\n};\n\nexport function autosaveReducer(\n  state: AutosaveState,\n  action: AutosaveAction\n): AutosaveState {\n  switch (action.type) {\n    case \"SAVE_START\":\n      return {\n        ...state,\n        isSaving: true,\n        lastError: null,\n      };\n\n    case \"SAVE_SUCCESS\": {\n      const { totalSaves, averageSaveTime } = state.metrics;\n      const newTotalSaves = totalSaves + 1;\n      const newAverageSaveTime =\n        (averageSaveTime * totalSaves + action.duration) / newTotalSaves;\n\n      return {\n        ...state,\n        isSaving: false,\n        lastError: null,\n        metrics: {\n          ...state.metrics,\n          totalSaves: newTotalSaves,\n          successfulSaves: state.metrics.successfulSaves + 1,\n          averageSaveTime: newAverageSaveTime,\n        },\n      };\n    }\n\n    case \"SAVE_ERROR\": {\n      const { totalSaves, averageSaveTime } = state.metrics;\n      const newTotalSaves = totalSaves + 1;\n      const newAverageSaveTime =\n        (averageSaveTime * totalSaves + action.duration) / newTotalSaves;\n\n      return {\n        ...state,\n        isSaving: false,\n        lastError: action.error,\n        metrics: {\n          ...state.metrics,\n          totalSaves: newTotalSaves,\n          failedSaves: state.metrics.failedSaves + 1,\n          averageSaveTime: newAverageSaveTime,\n        },\n      };\n    }\n\n    case \"UPDATE_BASELINE\":\n      return {\n        ...state,\n        baseline: { ...state.baseline, ...action.baseline },\n      };\n\n    case \"INITIALIZE_BASELINE\":\n      return {\n        ...state,\n        baseline: action.baseline,\n        isBaselineInitialized: true,\n      };\n\n    case \"RESET_BASELINE\":\n      return {\n        ...state,\n        baseline: null,\n        isBaselineInitialized: false,\n      };\n\n    case \"ABORT\":\n      return {\n        ...state,\n        isSaving: false,\n      };\n\n    default:\n      return state;\n  }\n}\n","export class ValidationCache {\n  private cache = new Map<string, boolean>();\n\n  constructor(private readonly maxSize = 50) {}\n\n  get(key: string): boolean | undefined {\n    return this.cache.get(key);\n  }\n\n  set(key: string, valid: boolean): void {\n    this.cache.set(key, valid);\n    this.cleanup();\n  }\n\n  clear(): void {\n    this.cache.clear();\n  }\n\n  // Add missing size method\n  size(): number {\n    return this.cache.size;\n  }\n\n  // Add has method for completeness\n  has(key: string): boolean {\n    return this.cache.has(key);\n  }\n\n  // Add delete method for completeness\n  delete(key: string): boolean {\n    return this.cache.delete(key);\n  }\n\n  // Add keys method for debugging\n  keys(): string[] {\n    return Array.from(this.cache.keys());\n  }\n\n  // Add entries method for debugging\n  entries(): Array<[string, boolean]> {\n    return Array.from(this.cache.entries());\n  }\n\n  private cleanup(): void {\n    if (this.cache.size <= this.maxSize) return;\n\n    const entries = Array.from(this.cache.entries());\n    const toRemove = entries.slice(0, entries.length - this.maxSize);\n    toRemove.forEach(([key]) => this.cache.delete(key));\n  }\n}\n","import type { SaveResult } from \"../core/types\";\n\nexport interface CacheEntry {\n  result: SaveResult;\n  timestamp: number;\n  hits: number;\n}\n\nexport class PayloadCache {\n  private cache = new Map<string, CacheEntry>();\n\n  constructor(\n    private readonly maxSize = 100,\n    private readonly ttlMs = 5 * 60 * 1000\n  ) {}\n\n  get(key: string): SaveResult | null {\n    const entry = this.cache.get(key);\n    if (!entry) return null;\n\n    if (this.isExpired(entry)) {\n      this.cache.delete(key);\n      return null;\n    }\n\n    entry.hits++;\n    return entry.result;\n  }\n\n  set(key: string, result: SaveResult): void {\n    this.cache.set(key, {\n      result,\n      timestamp: Date.now(),\n      hits: 0,\n    });\n\n    this.cleanup();\n  }\n\n  clear(): void {\n    this.cache.clear();\n  }\n\n  size(): number {\n    return this.cache.size;\n  }\n\n  // Add has method for completeness\n  has(key: string): boolean {\n    return this.cache.has(key);\n  }\n\n  // Add delete method for completeness\n  delete(key: string): boolean {\n    return this.cache.delete(key);\n  }\n\n  // Add keys method for debugging\n  keys(): string[] {\n    return Array.from(this.cache.keys());\n  }\n\n  // Add entries method for debugging\n  entries(): Array<[string, CacheEntry]> {\n    return Array.from(this.cache.entries());\n  }\n\n  // Add stats method for monitoring\n  getStats(): {\n    size: number;\n    totalHits: number;\n    averageHits: number;\n    oldestEntry: number;\n    newestEntry: number;\n  } {\n    const entries = Array.from(this.cache.values());\n    const totalHits = entries.reduce((sum, entry) => sum + entry.hits, 0);\n    const timestamps = entries.map((entry) => entry.timestamp);\n\n    return {\n      size: this.cache.size,\n      totalHits,\n      averageHits: entries.length > 0 ? totalHits / entries.length : 0,\n      oldestEntry: timestamps.length > 0 ? Math.min(...timestamps) : 0,\n      newestEntry: timestamps.length > 0 ? Math.max(...timestamps) : 0,\n    };\n  }\n\n  private isExpired(entry: CacheEntry): boolean {\n    return Date.now() - entry.timestamp > this.ttlMs;\n  }\n\n  private cleanup(): void {\n    if (this.cache.size <= this.maxSize) return;\n\n    // Remove expired entries first\n    for (const [key, entry] of this.cache.entries()) {\n      if (this.isExpired(entry)) {\n        this.cache.delete(key);\n      }\n    }\n\n    // If still over limit, remove least recently used\n    if (this.cache.size > this.maxSize) {\n      const entries = Array.from(this.cache.entries());\n      entries.sort((a, b) => a[1].timestamp - b[1].timestamp);\n\n      const toRemove = entries.slice(0, entries.length - this.maxSize);\n      toRemove.forEach(([key]) => this.cache.delete(key));\n    }\n  }\n}\n","export interface AutosaveMetrics {\n  totalSaves: number;\n  successfulSaves: number;\n  failedSaves: number;\n  averageDebounceTime: number;\n  averageSaveTime: number;\n  cacheHits: number;\n  cacheMisses: number;\n  retryCount: number;\n}\n\nexport class MetricsCollector {\n  constructor(private enabled: boolean = true) {}\n\n  private metrics: AutosaveMetrics = {\n    totalSaves: 0,\n    successfulSaves: 0,\n    failedSaves: 0,\n    averageDebounceTime: 0,\n    averageSaveTime: 0,\n    cacheHits: 0,\n    cacheMisses: 0,\n    retryCount: 0,\n  };\n\n  recordSave(duration: number, success: boolean): void {\n    if (!this.enabled) return;\n    this.metrics.totalSaves++;\n    if (success) {\n      this.metrics.successfulSaves++;\n    } else {\n      this.metrics.failedSaves++;\n    }\n\n    this.updateAverageSaveTime(duration);\n  }\n\n  recordCacheHit(): void {\n    this.metrics.cacheHits++;\n  }\n\n  recordCacheMiss(): void {\n    this.metrics.cacheMisses++;\n  }\n\n  recordRetry(): void {\n    this.metrics.retryCount++;\n  }\n\n  recordDebounce(duration: number): void {\n    this.updateAverageDebounceTime(duration);\n  }\n\n  getMetrics(): Readonly<AutosaveMetrics> {\n    return { ...this.metrics };\n  }\n\n  getSuccessRate(): number {\n    if (this.metrics.totalSaves === 0) return 1;\n    return this.metrics.successfulSaves / this.metrics.totalSaves;\n  }\n\n  getCacheHitRate(): number {\n    const totalCacheAccesses =\n      this.metrics.cacheHits + this.metrics.cacheMisses;\n    if (totalCacheAccesses === 0) return 0;\n    return this.metrics.cacheHits / totalCacheAccesses;\n  }\n\n  reset(): void {\n    this.metrics = {\n      totalSaves: 0,\n      successfulSaves: 0,\n      failedSaves: 0,\n      averageDebounceTime: 0,\n      averageSaveTime: 0,\n      cacheHits: 0,\n      cacheMisses: 0,\n      retryCount: 0,\n    };\n  }\n\n  private updateAverageSaveTime(duration: number): void {\n    const total = this.metrics.totalSaves;\n    this.metrics.averageSaveTime =\n      (this.metrics.averageSaveTime * (total - 1) + duration) / total;\n  }\n\n  private updateAverageDebounceTime(duration: number): void {\n    // Simple moving average for debounce time\n    this.metrics.averageDebounceTime =\n      (this.metrics.averageDebounceTime + duration) / 2;\n  }\n}\n","export interface Logger {\n  debug(message: string, meta?: any): void;\n  info(message: string, meta?: any): void;\n  warn(message: string, meta?: any): void;\n  error(message: string, error?: Error, meta?: any): void;\n}\n\nexport class ConsoleLogger implements Logger {\n  constructor(\n    private readonly namespace: string,\n    private readonly enabled = true\n  ) {}\n\n  debug(message: string, meta?: any): void {\n    if (!this.enabled) return;\n    const log = console.debug ?? console.log;\n    log(`[autosave:${this.namespace}]`, message, meta ? meta : \"\");\n  }\n\n  info(message: string, meta?: any): void {\n    if (!this.enabled) return;\n    console.info(`[autosave:${this.namespace}]`, message, meta ? meta : \"\");\n  }\n\n  warn(message: string, meta?: any): void {\n    if (!this.enabled) return;\n    console.warn(`[autosave:${this.namespace}]`, message, meta ? meta : \"\");\n  }\n\n  error(message: string, error?: Error, meta?: any): void {\n    if (!this.enabled) return;\n    console.error(\n      `[autosave:${this.namespace}]`,\n      message,\n      error,\n      meta ? meta : \"\"\n    );\n  }\n}\n\nexport function createLogger(namespace: string, enabled = false): Logger {\n  // Default to false if not specified - no auto-detection\n  return new ConsoleLogger(namespace, enabled);\n}\n","/**\n * Extracts only the \"dirty\" (changed) values from a form state.\n * Supports both flat and nested objects.\n */\nexport function pickChanged<T extends Record<string, any>>(\n  values: T,\n  dirty: any\n): Partial<T> {\n  const result: Partial<T> = {};\n\n  Object.keys(dirty ?? {}).forEach((key) => {\n    const dirtyValue = dirty[key];\n\n    if (dirtyValue === true) {\n      // Simple dirty field\n      (result as any)[key] = values[key];\n    } else if (typeof dirtyValue === \"object\" && dirtyValue !== null) {\n      // Nested dirty fields\n      const nestedResult = pickChanged(values[key] || {}, dirtyValue);\n      if (Object.keys(nestedResult).length > 0) {\n        (result as any)[key] = nestedResult;\n      }\n    }\n  });\n\n  return result;\n}\n","import type { FieldValues } from \"react-hook-form\";\nimport type { SavePayload } from \"../../../core/types\";\nimport { pickChanged } from \"../../../utils/pickChanged\";\nimport { mapKeys, type KeyMap } from \"../../../utils/mapKeys\";\nimport { createLogger } from \"../../../utils/logger\";\n\nexport function datesToIso(payload: SavePayload): SavePayload {\n  const out: SavePayload = {};\n  for (const k of Object.keys(payload)) {\n    const v = (payload as any)[k];\n    out[k] = v instanceof Date ? (v.toISOString() as any) : v;\n  }\n  return out;\n}\n\nexport function createDefaultSelectPayload<T extends FieldValues>(\n  getEffectiveDirtyFields: (dirty: any) => any,\n  diffMap?: Record<string, any>,\n  baselineRef?: { current: Record<string, any> | null },\n  lastOpRef?: { current: string | null }\n) {\n  const logger = createLogger(\"SelectPayload\");\n  return (values: T, dirty: any) => {\n    logger.debug(\"[selectPayload] Input:\", {\n      values,\n      dirty,\n      lastOp: lastOpRef?.current,\n    });\n\n    const effectiveDirty = getEffectiveDirtyFields(dirty);\n    logger.debug(\"[selectPayload] Effective dirty:\", effectiveDirty);\n\n    const result = pickChanged(values as any, effectiveDirty) as Partial<T>;\n    logger.debug(\"[selectPayload] After pickChanged:\", result);\n\n    // Rest of the function remains the same...\n\n    logger.debug(\"[selectPayload] Final result:\", result);\n    return result;\n  };\n}\n\nexport function createDefaultShouldSave<T extends FieldValues>(\n  getEffectiveDirtyFields: (dirty: any) => any,\n  baselineRef?: { current: Record<string, any> | null },\n  lastOpRef?: { current: string | null }\n) {\n  return ({ dirtyFields, values }: any) => {\n    const effectiveDirtyFields = getEffectiveDirtyFields(dirtyFields);\n    if (Object.keys(effectiveDirtyFields).length > 0) return true;\n\n    if (\n      baselineRef?.current &&\n      lastOpRef?.current &&\n      (lastOpRef.current === \"undo\" || lastOpRef.current === \"redo\")\n    ) {\n      for (const key of Object.keys(values)) {\n        if (!deepEqual((values as any)[key], baselineRef.current[key])) {\n          return true;\n        }\n      }\n    }\n\n    return false;\n  };\n}\n\nexport function createEffectiveDirtyFieldsGetter(\n  undoEnabled: boolean,\n  lastOpRef: { current: string | null },\n  undoAffectedFieldsRef: { current: Set<string> }\n) {\n  return (currentDirty: any) => {\n    const effective = { ...currentDirty };\n\n    if (\n      undoEnabled &&\n      (lastOpRef.current === \"undo\" || lastOpRef.current === \"redo\")\n    ) {\n      for (const fieldName of undoAffectedFieldsRef.current) {\n        const parts = fieldName.split(\".\");\n        let current: any = effective;\n        for (let i = 0; i < parts.length - 1; i++) {\n          if (!current[parts[i]]) current[parts[i]] = {};\n          current = current[parts[i]];\n        }\n        current[parts[parts.length - 1]] = true;\n      }\n    }\n\n    return effective;\n  };\n}\n\nexport function createComposedTransport(\n  baseTransport: any,\n  keyMap?: KeyMap,\n  mapPayload?: (payload: Record<string, any>) => Record<string, any>,\n  diffMap?: Record<string, any>,\n  updateBaseline?: (payload: SavePayload) => void,\n  undoEnabled?: boolean,\n  undoMgrRef?: { current: any },\n  onSaved?: (result: any, payload: SavePayload) => void,\n  metrics?: any,\n  logger?: any,\n  baselineRef?: { current: Record<string, any> | null }\n) {\n  return async (payload: SavePayload, ctx: any) => {\n    const start = performance.now();\n    // Transport composition logic will go here\n    // This is a placeholder for the complex transport logic\n    return baseTransport(payload, ctx);\n  };\n}\n\n// Import deepEqual from diff.ts to avoid circular dependency\nfunction deepEqual(a: any, b: any): boolean {\n  if (Object.is(a, b)) return true;\n  if (a instanceof Date && b instanceof Date) {\n    return a.getTime() === b.getTime();\n  }\n  if (typeof a !== typeof b) return false;\n  if (Array.isArray(a) && Array.isArray(b)) {\n    if (a.length !== b.length) return false;\n    for (let i = 0; i < a.length; i++) {\n      if (!deepEqual(a[i], b[i])) return false;\n    }\n    return true;\n  }\n  if (\n    a !== null &&\n    typeof a === \"object\" &&\n    b !== null &&\n    typeof b === \"object\"\n  ) {\n    const ak = Object.keys(a);\n    const bk = Object.keys(b);\n    if (ak.length !== bk.length) return false;\n    for (const k of ak) {\n      if (!deepEqual(a[k], (b as any)[k])) return false;\n    }\n    return true;\n  }\n  return false;\n}\n","export type KeyMap = Record<\n  string,\n  string | [apiKey: string, transform: (v: any) => any]\n>;\n\nexport function mapKeys(\n  payload: Record<string, any>,\n  keyMap: KeyMap\n): Record<string, any> {\n  const result: Record<string, any> = {};\n\n  for (const [key, value] of Object.entries(payload)) {\n    const mapping = keyMap[key];\n\n    if (!mapping) {\n      result[key] = value;\n      continue;\n    }\n\n    if (typeof mapping === \"string\") {\n      result[mapping] = value;\n    } else {\n      const [apiKey, transform] = mapping;\n      result[apiKey] = transform ? transform(value) : value;\n    }\n  }\n\n  return result;\n}\n\nexport function createKeyMapper(keyMap: KeyMap) {\n  return (payload: Record<string, any>) => mapKeys(payload, keyMap);\n}\n","import type {\n  Transport,\n  SavePayload,\n  SaveContext,\n  SaveResult,\n} from \"../../../core/types\";\nimport type { DiffHandler } from \"./types\";\nimport { mapKeys, type KeyMap } from \"../../../utils/mapKeys\";\nimport { datesToIso } from \"./transforms\";\nimport { deepEqual } from \"./diff\";\nimport { createLogger, type Logger } from \"../../../utils/logger\";\n\ninterface ComposeTransportParams {\n  baseTransport: Transport;\n  diffMap?: Record<string, DiffHandler>;\n  keyMap?: KeyMap;\n  mapPayload?: (payload: Record<string, any>) => Record<string, any>;\n  updateBaseline?: (payload: SavePayload) => void;\n  undoEnabled?: boolean;\n  undoMgrRef?: { current: any };\n  onSaved?: (result: any, payload: SavePayload) => void;\n  metrics?: any;\n  logger?: Logger;\n  baselineRef?: { current: Record<string, any> | null };\n  lastOpRef?: { current: string | null };\n  undoAffectedFieldsRef?: { current: Set<string> };\n  dispatch?: (action: any) => void;\n  form?: any;\n  updateLastSavedState?: (values: any) => void;\n  isHydratingRef?: { current: boolean };\n  clearDebounceTimeout?: () => void;\n}\n\nexport function createComposedTransport({\n  baseTransport,\n  diffMap,\n  keyMap,\n  mapPayload,\n  updateBaseline,\n  undoEnabled,\n  undoMgrRef,\n  onSaved,\n  metrics,\n  logger,\n  baselineRef,\n  lastOpRef,\n  undoAffectedFieldsRef,\n  dispatch,\n  form,\n  updateLastSavedState,\n  isHydratingRef,\n  clearDebounceTimeout,\n}: ComposeTransportParams): Transport {\n  return async (payload: SavePayload, ctx?: SaveContext) => {\n    const start = performance.now();\n    dispatch?.({ type: \"SAVE_START\" });\n\n    try {\n      let remainingPayload = { ...payload };\n      const processedDiffMapFields: string[] = [];\n      const failedDiffMapFields: string[] = [];\n      const diffMapErrorDetails: Array<{\n        field: string;\n        operation: \"add\" | \"remove\";\n        error: Error;\n        itemId: string | number;\n      }> = [];\n\n      // Capture baseline snapshot at start of save for consistent restoration\n      const baselineSnapshot = new Map<string, any[]>();\n\n      // diffMap handling (list add/remove via callbacks)\n      if (diffMap && Object.keys(diffMap).length > 0) {\n        for (const [key, handler] of Object.entries(diffMap)) {\n          if (!(key in payload)) continue;\n\n          const prev = baselineRef?.current?.[key] || [];\n          const curr = (payload as any)[key] || [];\n\n          if (!Array.isArray(prev) || !Array.isArray(curr)) continue;\n\n          // Save snapshot of baseline for this field\n          baselineSnapshot.set(key, [...prev]);\n\n          const prevIds = new Set(prev.map(handler.idOf));\n          const currIds = new Set(curr.map(handler.idOf));\n\n          const added = curr.filter((x: any) => !prevIds.has(handler.idOf(x)));\n          const removed = prev.filter(\n            (x: any) => !currIds.has(handler.idOf(x))\n          );\n\n          logger?.debug(`DiffMap for ${key}`, {\n            baseline: prev.map(handler.idOf),\n            current: curr.map(handler.idOf),\n            added: added.map(handler.idOf),\n            removed: removed.map(handler.idOf),\n          });\n\n          // Execute diff operations and handle errors properly\n          let hasErrors = false;\n\n          // Handle additions\n          for (const item of added) {\n            try {\n              await Promise.resolve(handler.onAdd(item));\n              logger?.debug(\n                `Successfully added item to ${key}:`,\n                handler.idOf(item)\n              );\n            } catch (error) {\n              hasErrors = true;\n              const err =\n                error instanceof Error ? error : new Error(String(error));\n\n              diffMapErrorDetails.push({\n                field: key,\n                operation: \"add\",\n                error: err,\n                itemId: handler.idOf(item),\n              });\n\n              logger?.error(`Failed to add item to ${key}:`, err, {\n                item: handler.idOf(item),\n              });\n            }\n          }\n\n          // Handle removals\n          for (const item of removed) {\n            try {\n              await Promise.resolve(handler.onRemove(item));\n              logger?.debug(\n                `Successfully removed item from ${key}:`,\n                handler.idOf(item)\n              );\n            } catch (error) {\n              hasErrors = true;\n              const err =\n                error instanceof Error ? error : new Error(String(error));\n\n              diffMapErrorDetails.push({\n                field: key,\n                operation: \"remove\",\n                error: err,\n                itemId: handler.idOf(item),\n              });\n\n              logger?.error(`Failed to remove item from ${key}:`, err, {\n                item: handler.idOf(item),\n              });\n            }\n          }\n\n          // Always remove diffMap fields from remainingPayload\n          // Failed fields will be reverted, successful fields are already handled\n          if (hasErrors) {\n            failedDiffMapFields.push(key);\n            delete (remainingPayload as any)[key];\n            logger?.warn(\n              `DiffMap operations failed for field ${key}, removing from payload and will revert`\n            );\n          } else {\n            processedDiffMapFields.push(key);\n            delete (remainingPayload as any)[key];\n            logger?.debug(\n              `DiffMap operations succeeded for field ${key}, removed from payload`\n            );\n          }\n        }\n      }\n\n      // If we have diffMap errors and no main payload to save, fail immediately\n      if (\n        diffMapErrorDetails.length > 0 &&\n        Object.keys(remainingPayload).length === 0\n      ) {\n        const combinedError = new Error(\n          `DiffMap operations failed: ${diffMapErrorDetails\n            .map(\n              (detail) =>\n                `${detail.field}.${detail.operation}(${detail.itemId}): ${detail.error.message}`\n            )\n            .join(\"; \")}`\n        );\n\n        const duration = performance.now() - start;\n        dispatch?.({ type: \"SAVE_ERROR\", error: combinedError, duration });\n        metrics?.recordSave(duration, false);\n\n        // REVERT FORM BEFORE RETURNING\n        if (form && diffMapErrorDetails.length > 0) {\n          logger?.debug(\"Reverting diffMap fields before early return\", {\n            errorDetails: diffMapErrorDetails,\n          });\n\n          // Cancel any pending debounced saves\n          clearDebounceTimeout?.();\n\n          // Signal that we're reverting (to suppress undo recording)\n          if (lastOpRef) {\n            lastOpRef.current = \"revert\";\n          }\n          if (isHydratingRef) {\n            isHydratingRef.current = true;\n          }\n\n          // Revert each failed field to baseline\n          failedDiffMapFields.forEach((field) => {\n            try {\n              const handler = diffMap?.[field];\n              if (!handler) return;\n\n              const baselineValue = baselineSnapshot.get(field);\n              if (!Array.isArray(baselineValue)) return;\n\n              logger?.debug(`Reverting ${field} to baseline`, {\n                baseline: baselineValue.map(handler.idOf),\n              });\n\n              form.setValue(field as any, [...baselineValue], {\n                shouldDirty: false,\n                shouldTouch: false,\n                shouldValidate: false,\n              });\n            } catch (e) {\n              logger?.error(\n                `Failed to revert field ${field}`,\n                e instanceof Error ? e : new Error(String(e))\n              );\n            }\n          });\n\n          // Remove the undo entry that was created for this failed change\n          if (undoEnabled && undoMgrRef?.current) {\n            const state = undoMgrRef.current.getState();\n            if (state.past > 0) {\n              undoMgrRef.current.undoWithoutApplying();\n            }\n          }\n\n          // Update baseline to match the reverted values (prevents re-triggering save)\n          const revertedPayload: SavePayload = {};\n          failedDiffMapFields.forEach((field) => {\n            const baselineValue = baselineSnapshot.get(field);\n            if (baselineValue) {\n              revertedPayload[field] = baselineValue;\n            }\n          });\n          if (Object.keys(revertedPayload).length > 0) {\n            updateBaseline?.(revertedPayload);\n            logger?.debug(\"Updated baseline after revert to prevent re-save\", {\n              revertedPayload,\n            });\n          }\n\n          // Update last saved state with the reverted values\n          if (updateLastSavedState) {\n            const currentValues = form.getValues();\n            updateLastSavedState(currentValues);\n          }\n\n          // Clear the revert flag after a short delay\n          setTimeout(() => {\n            if (lastOpRef) lastOpRef.current = null;\n            if (isHydratingRef) isHydratingRef.current = false;\n          }, 100);\n        }\n\n        const failureResult = {\n          ok: false,\n          error: combinedError,\n          failedFields: failedDiffMapFields,\n          diffMapErrors: diffMapErrorDetails,\n        } as SaveResult;\n        onSaved?.(failureResult, payload);\n        return failureResult;\n      }\n\n      // Key transforms and mapping\n      let finalPayload = remainingPayload;\n      if (keyMap)\n        finalPayload = mapKeys(finalPayload as any, keyMap) as SavePayload;\n      if (mapPayload)\n        finalPayload = mapPayload(finalPayload as any) as SavePayload;\n      finalPayload = datesToIso(finalPayload);\n\n      // Execute main transport if there's a payload\n      let result: SaveResult;\n      if (Object.keys(finalPayload).length > 0) {\n        result = await baseTransport(finalPayload, ctx);\n\n        // If main transport failed, but we had successful diffMap operations,\n        // we need to decide how to handle this. For now, treat as overall failure.\n        if (!result.ok && processedDiffMapFields.length > 0) {\n          logger?.warn(\n            \"Main transport failed but diffMap operations succeeded\",\n            {\n              failedMainFields: Object.keys(finalPayload),\n              succeededDiffMapFields: processedDiffMapFields,\n            }\n          );\n        }\n      } else {\n        // No main payload, only diffMap operations\n        // Success depends on whether diffMap operations succeeded\n        if (diffMapErrorDetails.length > 0) {\n          const combinedError = new Error(\n            `DiffMap operations failed: ${diffMapErrorDetails\n              .map(\n                (detail) =>\n                  `${detail.field}.${detail.operation}(${detail.itemId}): ${detail.error.message}`\n              )\n              .join(\"; \")}`\n          );\n          result = {\n            ok: false,\n            error: combinedError,\n            failedFields: failedDiffMapFields,\n            diffMapErrors: diffMapErrorDetails,\n          } as SaveResult;\n        } else {\n          result = { ok: true } as SaveResult;\n        }\n      }\n\n      // If main transport succeeded but we had diffMap errors, treat as partial failure\n      if (result.ok && diffMapErrorDetails.length > 0) {\n        const combinedError = new Error(\n          `Partial save failure - DiffMap operations failed: ${diffMapErrorDetails\n            .map(\n              (detail) =>\n                `${detail.field}.${detail.operation}(${detail.itemId}): ${detail.error.message}`\n            )\n            .join(\"; \")}`\n        );\n        result = {\n          ok: false,\n          error: combinedError,\n          failedFields: failedDiffMapFields,\n          diffMapErrors: diffMapErrorDetails,\n        } as SaveResult;\n        logger?.warn(\"Main transport succeeded but diffMap operations failed\", {\n          succeededMainFields: Object.keys(finalPayload),\n          failedDiffMapFields,\n          errors: diffMapErrorDetails.map(\n            (d) => `${d.field}.${d.operation}(${d.itemId}): ${d.error.message}`\n          ),\n        });\n      }\n\n      const duration = performance.now() - start;\n\n      if (result.ok) {\n        dispatch?.({ type: \"SAVE_SUCCESS\", duration });\n\n        // Update baseline only with successfully saved data\n        const successfulPayload = { ...payload };\n        // Remove failed diffMap fields from baseline update\n        failedDiffMapFields.forEach((field) => {\n          delete (successfulPayload as any)[field];\n        });\n\n        updateBaseline?.(successfulPayload);\n        metrics?.recordSave(duration, true);\n\n        // Clear the current operation state\n        if (lastOpRef) lastOpRef.current = null;\n        if (undoAffectedFieldsRef) undoAffectedFieldsRef.current.clear();\n\n        // Update last saved state and reset form dirty state\n        if (form) {\n          const currentValues = form.getValues();\n\n          // Update last saved state BEFORE resetting form\n          if (updateLastSavedState) {\n            updateLastSavedState(currentValues);\n          }\n\n          // Reset form to clear dirty state for successfully saved fields only\n          // For failed diffMap fields, keep them dirty so user knows they need attention\n          const resetOptions = {\n            keepValues: true,\n            keepDirty: failedDiffMapFields.length > 0, // Keep dirty if we have failures\n            keepDirtyValues: false,\n            keepTouched: true,\n            keepErrors: false,\n            keepIsSubmitted: true,\n            keepSubmitCount: true,\n          };\n\n          form.reset(currentValues, resetOptions);\n\n          // If we had failed diffMap fields, manually mark them as dirty\n          if (failedDiffMapFields.length > 0) {\n            failedDiffMapFields.forEach((field) => {\n              try {\n                form.setValue(field, form.getValues(field), {\n                  shouldDirty: true,\n                });\n              } catch (e) {\n                logger?.warn(\n                  `Could not mark failed field ${field} as dirty`,\n                  e\n                );\n              }\n            });\n          }\n\n          logger?.debug(\"Reset form after save\", {\n            regularFields: Object.keys(finalPayload),\n            succeededDiffMapFields: processedDiffMapFields,\n            failedDiffMapFields,\n            resetOptions,\n          });\n        }\n\n        // Mark checkpoint for undo but keep history\n        if (undoEnabled && undoMgrRef?.current) {\n          undoMgrRef.current.markCheckpoint();\n          logger?.debug(\"Marked checkpoint after successful save\", {\n            checkpointState: undoMgrRef.current.getState?.(),\n          });\n        }\n\n        onSaved?.(result, payload);\n      } else {\n        // FAILURE CASE: Revert only failed diffMap items, keeping successful changes\n        dispatch?.({ type: \"SAVE_ERROR\", error: result.error, duration });\n        metrics?.recordSave(duration, false);\n\n        // If we have diffMap errors, revert ONLY the failed items, not the entire field\n        if (form && diffMapErrorDetails.length > 0) {\n          logger?.debug(\"Reverting only failed diffMap items\", {\n            errorDetails: diffMapErrorDetails,\n          });\n\n          // Cancel any pending debounced saves\n          clearDebounceTimeout?.();\n\n          // Signal that we're reverting (to suppress undo recording)\n          if (lastOpRef) {\n            lastOpRef.current = \"revert\";\n          }\n          if (isHydratingRef) {\n            isHydratingRef.current = true;\n          }\n\n          // Group errors by field\n          const errorsByField = new Map<\n            string,\n            Array<{\n              operation: \"add\" | \"remove\";\n              itemId: string | number;\n              error: Error;\n            }>\n          >();\n\n          diffMapErrorDetails.forEach((detail) => {\n            if (!errorsByField.has(detail.field)) {\n              errorsByField.set(detail.field, []);\n            }\n            errorsByField.get(detail.field)!.push({\n              operation: detail.operation,\n              itemId: detail.itemId,\n              error: detail.error,\n            });\n          });\n\n          // Track the reverted values to update baseline\n          const revertedPayload: SavePayload = {};\n\n          // Revert each field completely to baseline on any failure\n          errorsByField.forEach((errors, field) => {\n            try {\n              const handler = diffMap?.[field];\n              if (!handler) {\n                logger?.warn(`No diffMap handler for field ${field}`);\n                return;\n              }\n\n              const currentValue = form.getValues(field as any);\n              const baselineValue = baselineSnapshot.get(field);\n\n              if (\n                !Array.isArray(currentValue) ||\n                !Array.isArray(baselineValue)\n              ) {\n                logger?.warn(`Field ${field} is not an array, cannot revert`);\n                return;\n              }\n\n              // Simply revert to baseline snapshot - don't try to be smart about partial success\n              // This is clearer and more predictable for the user\n              const revertedValue = [...baselineValue];\n\n              logger?.debug(`Reverted ${field} to baseline due to failures`, {\n                baseline: baselineValue.map(handler.idOf),\n                current: currentValue.map(handler.idOf),\n                reverted: revertedValue.map(handler.idOf),\n                errors: errors.map((e) => `${e.operation}(${e.itemId})`),\n              });\n\n              // Store the reverted value for baseline update\n              revertedPayload[field] = revertedValue;\n\n              // Set the reverted value\n              logger?.debug(`Setting reverted value for ${field}`, {\n                before: currentValue.map((item) => handler.idOf(item)),\n                after: revertedValue.map((item) => handler.idOf(item)),\n              });\n\n              form.setValue(field as any, revertedValue, {\n                shouldDirty: false, // Don't mark as dirty - the reverted value should match baseline\n                shouldTouch: false,\n                shouldValidate: false,\n              });\n            } catch (e) {\n              logger?.error(\n                `Failed to revert field ${field}`,\n                e instanceof Error ? e : new Error(String(e))\n              );\n            }\n          });\n\n          // Update baseline to match the reverted values (prevents re-triggering save)\n          if (Object.keys(revertedPayload).length > 0) {\n            updateBaseline?.(revertedPayload);\n            logger?.debug(\"Updated baseline after revert to prevent re-save\", {\n              revertedPayload,\n            });\n          }\n\n          // Remove the undo entry that was created for this failed change\n          if (undoEnabled && undoMgrRef?.current) {\n            const state = undoMgrRef.current.getState();\n            if (state.past > 0) {\n              logger?.debug(\"Removing failed change from undo history\", {\n                stateBefore: state,\n              });\n\n              undoMgrRef.current.undoWithoutApplying();\n\n              logger?.debug(\"Removed failed change from undo history\", {\n                stateAfter: undoMgrRef.current.getState(),\n              });\n            }\n          }\n\n          // Update last saved state with the reverted values\n          if (updateLastSavedState && form) {\n            const currentValues = form.getValues();\n            updateLastSavedState(currentValues);\n            logger?.debug(\"Updated last saved state after revert\");\n          }\n\n          // Clear the revert flag after a short delay\n          setTimeout(() => {\n            if (lastOpRef) {\n              lastOpRef.current = null;\n            }\n            if (isHydratingRef) {\n              isHydratingRef.current = false;\n            }\n          }, 100);\n        }\n\n        onSaved?.(result, payload);\n      }\n\n      return result;\n    } catch (e) {\n      const duration = performance.now() - start;\n      const err = e instanceof Error ? e : new Error(String(e));\n      dispatch?.({ type: \"SAVE_ERROR\", error: err, duration });\n      metrics?.recordSave(duration, false);\n      const failureResult = { ok: false, error: err };\n      onSaved?.(failureResult, payload);\n      return failureResult;\n    }\n  };\n}\n","import type { Patch } from \"./types\";\n\n/* ================================ Utilities ================================== */\n\nfunction isObject(x: any): boolean {\n  return x !== null && typeof x === \"object\";\n}\n\nexport function deepEqual(a: any, b: any): boolean {\n  if (Object.is(a, b)) return true;\n\n  if (a instanceof Date && b instanceof Date) {\n    return a.getTime() === b.getTime();\n  }\n\n  if (typeof a !== typeof b) return false;\n\n  if (Array.isArray(a) && Array.isArray(b)) {\n    if (a.length !== b.length) return false;\n\n    const aHasIds =\n      a.length > 0 && a[0] && typeof a[0] === \"object\" && \"id\" in a[0];\n    const bHasIds =\n      b.length > 0 && b[0] && typeof b[0] === \"object\" && \"id\" in b[0];\n\n    if (aHasIds && bHasIds) {\n      const aIds = a.map((item: any) => item.id).sort();\n      const bIds = b.map((item: any) => item.id).sort();\n      return JSON.stringify(aIds) === JSON.stringify(bIds);\n    }\n\n    for (let i = 0; i < a.length; i++) {\n      if (!deepEqual(a[i], b[i])) return false;\n    }\n    return true;\n  }\n\n  if (isObject(a) && isObject(b)) {\n    const ak = Object.keys(a);\n    const bk = Object.keys(b);\n    if (ak.length !== bk.length) return false;\n    for (const k of ak) {\n      if (!deepEqual(a[k], (b as any)[k])) return false;\n    }\n    return true;\n  }\n\n  return false;\n}\n\nexport function diffToPatches(prev: any, next: any, basePath = \"\"): Patch[] {\n  if (deepEqual(prev, next)) return [];\n\n  if (Array.isArray(prev) && Array.isArray(next)) {\n    return [\n      {\n        name: basePath,\n        prevValue: prev,\n        nextValue: next,\n        rootField: basePath.includes(\".\") ? basePath.split(\".\")[0] : basePath,\n      },\n    ];\n  }\n\n  const prevIsObj =\n    isObject(prev) && !Array.isArray(prev) && !(prev instanceof Date);\n  const nextIsObj =\n    isObject(next) && !Array.isArray(next) && !(next instanceof Date);\n\n  if (!prevIsObj || !nextIsObj) {\n    return [\n      {\n        name: basePath,\n        prevValue: prev,\n        nextValue: next,\n        rootField: basePath.includes(\".\") ? basePath.split(\".\")[0] : basePath,\n      },\n    ];\n  }\n\n  const patches: Patch[] = [];\n  const keys = new Set<string>([\n    ...Object.keys(prev ?? {}),\n    ...Object.keys(next ?? {}),\n  ]);\n  for (const k of keys) {\n    const childPath = basePath ? `${basePath}.${k}` : k;\n    const p = (prev ?? {})[k];\n    const n = (next ?? {})[k];\n\n    if (!deepEqual(p, n)) {\n      if (Array.isArray(p) && Array.isArray(n)) {\n        patches.push({\n          name: childPath,\n          prevValue: p,\n          nextValue: n,\n          rootField: childPath.includes(\".\")\n            ? childPath.split(\".\")[0]\n            : childPath,\n        });\n      } else if (p instanceof Date && n instanceof Date) {\n        patches.push({\n          name: childPath,\n          prevValue: p,\n          nextValue: n,\n          rootField: childPath.includes(\".\")\n            ? childPath.split(\".\")[0]\n            : childPath,\n        });\n      } else if (isObject(p) && isObject(n)) {\n        patches.push(...diffToPatches(p, n, childPath));\n      } else {\n        patches.push({\n          name: childPath,\n          prevValue: p,\n          nextValue: n,\n          rootField: childPath.includes(\".\")\n            ? childPath.split(\".\")[0]\n            : childPath,\n        });\n      }\n    }\n  }\n  return patches;\n}\n\nexport function stableStringify(obj: Record<string, any>): string {\n  const keys = Object.keys(obj).sort();\n  const out: Record<string, any> = {};\n  for (const k of keys) out[k] = obj[k];\n  return JSON.stringify(out);\n}\n\nexport function isEditableElement(el: Element | null): boolean {\n  if (!el || !(el as HTMLElement).closest) return false;\n  const node = el as HTMLElement;\n  if (node.isContentEditable) return true;\n  const tag = node.tagName;\n  if (tag === \"INPUT\" || tag === \"TEXTAREA\" || tag === \"SELECT\") return true;\n  // Also consider elements with role=\"textbox\"\n  if (node.getAttribute && node.getAttribute(\"role\") === \"textbox\") return true;\n  return false;\n}\n","import { useRef, useCallback } from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport type { FormSubset } from \"../../../strategies/validation/types\";\nimport type { SavePayload } from \"../../../core/types\";\nimport type { BaselineState, DiffHandler } from \"../utils/types\";\nimport { deepEqual } from \"../utils/diff\";\nimport { createLogger, type Logger } from \"../../../utils/logger\";\n\nexport function useBaseline<T extends FieldValues>(\n  form: FormSubset<T>,\n  diffMap?: Record<string, DiffHandler>,\n  undoEnabled?: boolean,\n  debug?: boolean\n) {\n  const logger = createLogger(\"baseline\", debug);\n  const baselineRef = useRef<Record<string, any> | null>(null);\n  const isBaselineInitializedRef = useRef<boolean>(false);\n\n  const equalsBaseline = useCallback((vals: any): boolean => {\n    if (!baselineRef.current) return false;\n    const keys = new Set([\n      ...Object.keys(vals || {}),\n      ...Object.keys(baselineRef.current || {}),\n    ]);\n    for (const k of keys) {\n      if (!deepEqual(vals[k], (baselineRef.current as any)[k])) return false;\n    }\n    return true;\n  }, []);\n\n  const initializeBaseline = useCallback(\n    (values: Record<string, any>) => {\n      logger.debug(\"Initializing baseline from clean form state\", values);\n      baselineRef.current = { ...values };\n      isBaselineInitializedRef.current = true;\n    },\n    [logger]\n  );\n\n  const updateBaseline = useCallback(\n    (payload: SavePayload): void => {\n      if (!baselineRef.current) return;\n      const nextBaseline = { ...baselineRef.current };\n      for (const k of Object.keys(payload)) {\n        (nextBaseline as any)[k] = (payload as any)[k];\n      }\n      baselineRef.current = nextBaseline;\n      logger.debug(\"Baseline updated after success\", nextBaseline);\n    },\n    [logger]\n  );\n\n  const resetBaseline = useCallback(() => {\n    baselineRef.current = null;\n    isBaselineInitializedRef.current = false;\n  }, []);\n\n  const forceBaselineUpdate = useCallback(() => {\n    const currentValues = form.getValues() as any;\n    baselineRef.current = { ...currentValues };\n    isBaselineInitializedRef.current = true;\n    logger.debug(\"Forced baseline update\", currentValues);\n  }, [form, logger]);\n\n  const getBaseline = useCallback(() => baselineRef.current, []);\n\n  const isBaselineInitialized = useCallback(\n    () => isBaselineInitializedRef.current,\n    []\n  );\n\n  const shouldInitializeBaseline = useCallback(\n    (isDirty: boolean) => {\n      return (\n        (diffMap || undoEnabled) &&\n        !isDirty &&\n        !isBaselineInitializedRef.current\n      );\n    },\n    [diffMap, undoEnabled]\n  );\n\n  const shouldResetBaseline = useCallback(\n    (isDirty: boolean, dirtyFields: any) => {\n      return !isDirty && Object.keys(dirtyFields).length === 0;\n    },\n    []\n  );\n\n  return {\n    // State refs\n    baselineRef,\n    isBaselineInitializedRef,\n\n    // Methods\n    equalsBaseline,\n    initializeBaseline,\n    updateBaseline,\n    resetBaseline,\n    forceBaselineUpdate,\n    getBaseline,\n    isBaselineInitialized,\n\n    // Conditional checks\n    shouldInitializeBaseline,\n    shouldResetBaseline,\n  };\n}\n","import type { FieldPath, HistoryEntry } from \"../utils/types\";\n\n/** Minimal manager that writes via RHF setValue */\nexport class InternalUndoManager {\n  private past: HistoryEntry[] = [];\n  private future: HistoryEntry[] = [];\n  private listeners = new Set<() => void>();\n  private lastOp: \"user\" | \"undo\" | \"redo\" | null = null;\n  private checkpoints: number[] = [];\n\n  constructor(\n    private setValue: (\n      name: FieldPath,\n      value: unknown,\n      shouldDirty?: boolean\n    ) => void,\n    private getCurrentValues: () => Record<string, any>,\n    private onHistoryApplied?: (\n      entry: HistoryEntry,\n      op: \"undo\" | \"redo\"\n    ) => void,\n    private maxEntries?: number\n  ) {}\n\n  subscribe(listener: () => void): () => void {\n    this.listeners.add(listener);\n    return () => {\n      this.listeners.delete(listener);\n    };\n  }\n\n  private notify(): void {\n    for (const l of this.listeners) l();\n  }\n\n  record(entry: HistoryEntry): void {\n    if (!entry.length) return;\n\n    // Add to past\n    this.past.push(entry);\n\n    // Trim if too many entries\n    if (this.maxEntries && this.past.length > this.maxEntries) {\n      this.past.shift();\n      // Adjust checkpoints if we removed old entries\n      this.checkpoints = this.checkpoints\n        .map((cp) => cp - 1)\n        .filter((cp) => cp >= 0);\n    }\n\n    // NOTE: We do NOT clear future here anymore\n    // clearFuture() should be called explicitly by the caller if needed\n\n    this.lastOp = \"user\";\n    this.notify();\n  }\n\n  /** Clear future stack (called when user starts typing after undo) */\n  clearFuture(): void {\n    if (this.future.length) {\n      this.future = [];\n      this.notify();\n    }\n  }\n\n  undo(): boolean {\n    const entry = this.past.pop();\n    if (!entry) return false;\n\n    // Get current state BEFORE applying undo\n    const currentValues = this.getCurrentValues();\n\n    // Build redo entry from current state\n    const redoEntry: HistoryEntry = entry.map((patch) => ({\n      name: patch.name,\n      prevValue: patch.nextValue, // What we had (will undo from)\n      nextValue:\n        currentValues[patch.name] !== undefined\n          ? currentValues[patch.name]\n          : patch.nextValue, // Current value to restore on redo\n      rootField: patch.rootField,\n    }));\n\n    // Add to future stack for redo\n    this.future.push(redoEntry);\n\n    // Apply the undo (restore previous values)\n    for (const { name, prevValue } of entry) {\n      this.setValue(name, prevValue, true);\n    }\n\n    this.lastOp = \"undo\";\n    this.onHistoryApplied?.(entry, \"undo\");\n    this.notify();\n    return true;\n  }\n\n  redo(): boolean {\n    const entry = this.future.pop();\n    if (!entry) return false;\n\n    // Get current state BEFORE applying redo\n    const currentValues = this.getCurrentValues();\n\n    // Build undo entry from current state\n    const undoEntry: HistoryEntry = entry.map((patch) => ({\n      name: patch.name,\n      prevValue:\n        currentValues[patch.name] !== undefined\n          ? currentValues[patch.name]\n          : patch.prevValue, // Current value to restore on undo\n      nextValue: patch.nextValue, // What we're about to set\n      rootField: patch.rootField,\n    }));\n\n    // Add to past stack for undo\n    this.past.push(undoEntry);\n\n    // Apply the redo (restore next values)\n    for (const { name, nextValue } of entry) {\n      this.setValue(name, nextValue, true);\n    }\n\n    this.lastOp = \"redo\";\n    this.onHistoryApplied?.(entry, \"redo\");\n    this.notify();\n    return true;\n  }\n\n  /** Remove the last entry from past without applying it (useful when a change fails to save) */\n  undoWithoutApplying(): boolean {\n    const entry = this.past.pop();\n    if (!entry) return false;\n\n    this.lastOp = null;\n    this.notify();\n    return true;\n  }\n\n  markCheckpoint(): void {\n    this.checkpoints.push(this.past.length);\n  }\n\n  undoToLastCheckpoint(): boolean {\n    const target = this.checkpoints.pop();\n    if (target === undefined) {\n      // No checkpoint found - undo everything\n      console.debug(\"[UndoManager] No checkpoint found, undoing all changes\");\n      let undidSomething = false;\n      while (this.past.length > 0) {\n        if (!this.undo()) break;\n        undidSomething = true;\n      }\n      return undidSomething;\n    }\n\n    // Undo until we reach the checkpoint\n    console.debug(`[UndoManager] Undoing to checkpoint at position ${target}`);\n    let undidSomething = false;\n    while (this.past.length > target) {\n      if (!this.undo()) break;\n      undidSomething = true;\n    }\n    return undidSomething;\n  }\n\n  canUndo(): boolean {\n    return this.past.length > 0;\n  }\n\n  canRedo(): boolean {\n    return this.future.length > 0;\n  }\n\n  getLastOp(): \"user\" | \"undo\" | \"redo\" | null {\n    return this.lastOp;\n  }\n\n  clear(): void {\n    this.past = [];\n    this.future = [];\n    this.lastOp = null;\n    this.checkpoints = [];\n    this.notify();\n  }\n\n  // Debug helper\n  getState(): { past: number; future: number; checkpoints: number[] } {\n    return {\n      past: this.past.length,\n      future: this.future.length,\n      checkpoints: [...this.checkpoints],\n    };\n  }\n}\n","import { useRef, useEffect, useMemo, useReducer, useCallback } from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport type { FormSubset } from \"../../../strategies/validation/types\";\nimport type {\n  UndoOptions,\n  UndoOp,\n  UndoRedoState,\n  UndoRedoAPI,\n} from \"../utils/types\";\nimport { InternalUndoManager } from \"../managers/InternalUndoManager\";\nimport {\n  diffToPatches,\n  stableStringify,\n  isEditableElement,\n  deepEqual,\n} from \"../utils/diff\";\nimport { createLogger, type Logger } from \"../../../utils/logger\";\n\ninterface UndoRedoHookParams {\n  updateBaseline?: (values: any) => void;\n  updateLastSavedState?: (values: any) => void;\n}\n\nexport function useUndoRedo<T extends FieldValues>(\n  form: FormSubset<T>,\n  undoOptions: UndoOptions | undefined,\n  ignoreHistoryOps: boolean,\n  equalsBaseline: (vals: any) => boolean,\n  debouncedSave: (values: T, dirtyFields: any, forceAfterUndo: boolean) => void,\n  shouldSave: (ctx: {\n    values: T;\n    isValid: boolean;\n    isDirty: boolean;\n    dirtyFields: any;\n  }) => boolean,\n  debug?: boolean,\n  params?: UndoRedoHookParams // NEW: Add optional params for baseline/saved state updates\n) {\n  const logger = createLogger(\"undo-redo\", debug);\n\n  const undoEnabled = !!undoOptions?.enabled;\n  const hotkeysEnabled = undoEnabled && (undoOptions?.hotkeys ?? true);\n  const captureInInputs = undoOptions?.captureInInputs ?? false;\n  const hotkeyTarget: Document | HTMLElement =\n    undoOptions?.target ??\n    (typeof document !== \"undefined\" ? document : (undefined as any));\n\n  // State refs\n  const initialValues = form.getValues();\n  const lastValuesRef = useRef<any>(initialValues);\n  const suppressRecordRef = useRef<UndoOp>(null);\n  const undoMgrRef = useRef<InternalUndoManager | null>(null);\n  const lastOpRef = useRef<UndoOp>(null);\n  const undoAffectedFieldsRef = useRef<Set<string>>(new Set());\n  const isHydratingRef = useRef(false);\n  // Initialize with initial form state to prevent recording empty first step\n  const lastRecordedValuesSigRef = useRef<string>(stableStringify(initialValues as any));\n  const historyPendingRef = useRef(false);\n  const noPendingGuardRef = useRef(false);\n\n  // Rerender when undo stack changes (so canUndo/canRedo stay live)\n  const [undoRenderTrigger, forceUndoRender] = useReducer((x) => x + 1, 0);\n\n  const values = form.watch();\n\n  // Never mutate baseline during history ops (only after confirmed save)\n  const updateBaselineAfterHistory = useCallback(\n    (_entry: any, op: \"undo\" | \"redo\") => {\n      logger.debug(\n        `History applied (${op}) â€” baseline unchanged (server state)`\n      );\n    },\n    [logger]\n  );\n\n  // Helper to get current form values in a flat structure\n  const getCurrentValues = useCallback(() => {\n    const currentValues = form.getValues();\n    // Flatten nested objects for proper tracking\n    const flattened: Record<string, any> = {};\n\n    const flatten = (obj: any, prefix = \"\") => {\n      for (const key in obj) {\n        const fullKey = prefix ? `${prefix}.${key}` : key;\n        if (\n          obj[key] !== null &&\n          typeof obj[key] === \"object\" &&\n          !Array.isArray(obj[key]) &&\n          !(obj[key] instanceof Date)\n        ) {\n          flatten(obj[key], fullKey);\n        } else {\n          flattened[fullKey] = obj[key];\n        }\n      }\n    };\n\n    flatten(currentValues);\n    return flattened;\n  }, [form]);\n\n  // Initialize undo manager\n  useEffect(() => {\n    if (!undoEnabled) return;\n    if (undoMgrRef.current) return;\n\n    const writer = (name: string, value: unknown) => {\n      // Reflect true op while applying history (helps skip recording)\n      suppressRecordRef.current = lastOpRef.current ?? \"undo\";\n\n      undoAffectedFieldsRef.current.add(name);\n      if (name.includes(\".\")) {\n        undoAffectedFieldsRef.current.add(name.split(\".\")[0]);\n      }\n\n      (form as any)?.setValue?.(name, value, {\n        shouldDirty: true,\n        shouldTouch: true,\n        shouldValidate: true,\n      });\n\n      if (\n        Array.isArray(value) &&\n        value.length > 0 &&\n        (value as any)[0]?.id !== undefined\n      ) {\n        setTimeout(() => (form as any)?.trigger?.(name), 0);\n      }\n    };\n\n    undoMgrRef.current = new InternalUndoManager(\n      writer,\n      getCurrentValues,\n      updateBaselineAfterHistory\n    );\n  }, [undoEnabled, updateBaselineAfterHistory, form, getCurrentValues]);\n\n  // Subscribe to undo manager changes for live updates\n  useEffect(() => {\n    if (!undoEnabled) return;\n    if (!undoMgrRef.current) return;\n    const unsub = undoMgrRef.current.subscribe(() => forceUndoRender());\n    return () => unsub();\n  }, [undoEnabled]);\n\n  // Record user changes (idempotent)\n  useEffect(() => {\n    if (!undoEnabled) {\n      lastValuesRef.current = values;\n      return;\n    }\n\n    // Skip recording while hydrating\n    if (isHydratingRef.current) {\n      lastValuesRef.current = values;\n      return;\n    }\n\n    // If we're in the middle of applying an undo/redo operation, skip recording\n    // but clear the suppress flag so future changes can be recorded\n    if (\n      suppressRecordRef.current === \"undo\" ||\n      suppressRecordRef.current === \"redo\"\n    ) {\n      lastValuesRef.current = values;\n      // Clear suppress flag after this effect to allow next change to be recorded\n      suppressRecordRef.current = null;\n      return;\n    }\n\n    // Skip hydrate operations\n    if (suppressRecordRef.current === \"hydrate\") {\n      lastValuesRef.current = values;\n      suppressRecordRef.current = null;\n      return;\n    }\n\n    noPendingGuardRef.current = false;\n\n    const mgr = undoMgrRef.current!;\n    const prev = lastValuesRef.current;\n    const next = values;\n    const patches = diffToPatches(prev, next, \"\");\n\n    if (patches.length) {\n      // CRITICAL: If we can redo AND we have patches, this is a new user change after undo,\n      // so we MUST clear the future stack (the redo history) BEFORE any other checks\n      if (mgr.canRedo()) {\n        logger.debug(\"Clearing redo stack due to new user change after undo\", {\n          futureLength: mgr.getState().future,\n        });\n        mgr.clearFuture();\n      }\n\n      // De-dupe identical logical state (StrictMode)\n      const nextSig = stableStringify(next as any);\n      if (nextSig !== lastRecordedValuesSigRef.current) {\n        // This is a real change from the user - record it\n        mgr.record(patches);\n        lastOpRef.current = \"user\";\n        lastRecordedValuesSigRef.current = nextSig;\n        noPendingGuardRef.current = false;\n\n        logger.debug(\"Recorded user change\", {\n          patches: patches.length,\n          canUndo: mgr.canUndo(),\n          canRedo: mgr.canRedo(),\n          state: mgr.getState(),\n        });\n      } else {\n        logger.debug(\"Skipping duplicate change (same signature)\", {\n          nextSig,\n          lastRecordedSig: lastRecordedValuesSigRef.current,\n        });\n      }\n    }\n    lastValuesRef.current = next;\n  }, [values, undoEnabled, logger]);\n\n  // Keyboard shortcuts\n  useEffect(() => {\n    if (!hotkeysEnabled || !undoEnabled || !undoMgrRef.current || !hotkeyTarget)\n      return;\n\n    const onKeyDown = (e: KeyboardEvent) => {\n      // Cmd/Ctrl pressed?\n      const cmd = e.metaKey || e.ctrlKey;\n      if (!cmd) return;\n\n      // We only care about \"z\"\n      const key = (e.key || \"\").toLowerCase();\n      if (key !== \"z\") return;\n\n      // Respect inputs unless explicitly told not to\n      if (\n        !captureInInputs &&\n        isEditableElement((e.target as Element) ?? null)\n      ) {\n        return;\n      }\n\n      // Prevent the browser's default undo in those contexts\n      e.preventDefault();\n      e.stopPropagation();\n\n      const mgr = undoMgrRef.current!;\n      const wantsRedo = e.shiftKey; // Shift+Cmd/Ctrl+Z => redo\n\n      if (wantsRedo) {\n        if (mgr.canRedo()) {\n          executeRedo();\n        }\n      } else {\n        if (mgr.canUndo()) {\n          executeUndo();\n        }\n      }\n    };\n\n    hotkeyTarget.addEventListener(\"keydown\", onKeyDown as any, {\n      capture: true,\n    });\n    return () => {\n      hotkeyTarget.removeEventListener(\n        \"keydown\",\n        onKeyDown as any,\n        { capture: true } as any\n      );\n    };\n  }, [hotkeysEnabled, captureInInputs, undoEnabled, hotkeyTarget]);\n\n  const executeUndo = useCallback(() => {\n    if (!undoMgrRef.current) return;\n\n    logger.debug(\"Execute undo - state before:\", undoMgrRef.current.getState());\n\n    undoAffectedFieldsRef.current.clear();\n    suppressRecordRef.current = \"undo\";\n    lastOpRef.current = \"undo\";\n\n    // Perform the undo\n    const undoSuccessful = undoMgrRef.current.undo();\n\n    logger.debug(\"Execute undo - state after:\", undoMgrRef.current.getState());\n\n    if (!undoSuccessful) {\n      // Reset state if undo failed\n      suppressRecordRef.current = null;\n      lastOpRef.current = null;\n      return;\n    }\n\n    lastRecordedValuesSigRef.current = \"\"; // allow next real edit to record\n\n    // Wait a tick for the form state to update, then check if we need to save\n    setTimeout(() => {\n      const valuesAfter = form.getValues() as T;\n      const { isDirty, isValid, dirtyFields } = form.formState;\n      const baselineAfter = equalsBaseline(valuesAfter);\n\n      // Use the existing shouldSave logic to determine if we need to save\n      const needsSave = shouldSave({\n        values: valuesAfter,\n        isValid,\n        isDirty,\n        dirtyFields,\n      });\n\n      logger.debug(\"Undo executed\", {\n        undoSuccessful,\n        baselineAfter,\n        needsSave,\n        isDirty,\n        dirtyFieldsCount: Object.keys(dirtyFields).length,\n        ignoreHistoryOps,\n        undoRedoState: undoMgrRef.current?.getState(),\n      });\n\n      if (baselineAfter) {\n        historyPendingRef.current = false;\n        noPendingGuardRef.current = true;\n        lastRecordedValuesSigRef.current = stableStringify(valuesAfter as any);\n      }\n\n      // Only trigger autosave if shouldSave returns true and we're not ignoring history ops\n      if (!ignoreHistoryOps && needsSave) {\n        logger.debug(\n          \"Triggering autosave after undo - changes need to be saved\"\n        );\n\n        historyPendingRef.current = true;\n\n        setTimeout(() => {\n          const currentValuesAfter = form.getValues();\n          const currentDirtyFields = form.formState.dirtyFields;\n          debouncedSave(currentValuesAfter as T, currentDirtyFields, true);\n\n          // Reset lastOpRef after the save is queued\n          setTimeout(() => {\n            lastOpRef.current = null;\n          }, 50);\n        }, 100);\n      } else {\n        logger.debug(\n          \"Skipping autosave after undo - no changes need to be saved\",\n          {\n            ignoreHistoryOps,\n            needsSave,\n            baselineAfter,\n          }\n        );\n\n        // Reset lastOpRef immediately since we're not saving\n        setTimeout(() => {\n          lastOpRef.current = null;\n        }, 50);\n      }\n    }, 10);\n  }, [\n    form,\n    ignoreHistoryOps,\n    equalsBaseline,\n    debouncedSave,\n    shouldSave,\n    logger,\n  ]);\n\n  const executeRedo = useCallback(() => {\n    if (!undoMgrRef.current) return;\n\n    logger.debug(\"Execute redo - state before:\", undoMgrRef.current.getState());\n\n    undoAffectedFieldsRef.current.clear();\n    suppressRecordRef.current = \"redo\";\n    lastOpRef.current = \"redo\";\n\n    // Perform the redo\n    const redoSuccessful = undoMgrRef.current.redo();\n\n    logger.debug(\"Execute redo - state after:\", undoMgrRef.current.getState());\n\n    if (!redoSuccessful) {\n      // Reset state if redo failed\n      suppressRecordRef.current = null;\n      lastOpRef.current = null;\n      return;\n    }\n\n    lastRecordedValuesSigRef.current = \"\";\n\n    // Wait a tick for the form state to update, then check if we need to save\n    setTimeout(() => {\n      const valuesAfter = form.getValues() as T;\n      const { isDirty, isValid, dirtyFields } = form.formState;\n      const baselineAfter = equalsBaseline(valuesAfter);\n\n      // Use the existing shouldSave logic to determine if we need to save\n      const needsSave = shouldSave({\n        values: valuesAfter,\n        isValid,\n        isDirty,\n        dirtyFields,\n      });\n\n      logger.debug(\"Redo executed\", {\n        redoSuccessful,\n        baselineAfter,\n        needsSave,\n        isDirty,\n        dirtyFieldsCount: Object.keys(dirtyFields).length,\n        ignoreHistoryOps,\n        undoRedoState: undoMgrRef.current?.getState(),\n      });\n\n      if (baselineAfter) {\n        historyPendingRef.current = false;\n        lastRecordedValuesSigRef.current = stableStringify(valuesAfter as any);\n      }\n\n      // Only trigger autosave if shouldSave returns true and we're not ignoring history ops\n      if (!ignoreHistoryOps && needsSave) {\n        logger.debug(\n          \"Triggering autosave after redo - changes need to be saved\"\n        );\n\n        historyPendingRef.current = true;\n\n        setTimeout(() => {\n          const currentValuesAfter = form.getValues();\n          const currentDirtyFields = form.formState.dirtyFields;\n          debouncedSave(currentValuesAfter as T, currentDirtyFields, true);\n\n          // Reset lastOpRef after the save is queued\n          setTimeout(() => {\n            lastOpRef.current = null;\n          }, 50);\n        }, 100);\n      } else {\n        logger.debug(\n          \"Skipping autosave after redo - no changes need to be saved\",\n          {\n            ignoreHistoryOps,\n            needsSave,\n            baselineAfter,\n          }\n        );\n\n        // Reset lastOpRef immediately since we're not saving\n        setTimeout(() => {\n          lastOpRef.current = null;\n        }, 50);\n      }\n    }, 10);\n  }, [\n    form,\n    ignoreHistoryOps,\n    equalsBaseline,\n    debouncedSave,\n    shouldSave,\n    logger,\n  ]);\n\n  const executeUndoLastSave = useCallback(() => {\n    if (!undoMgrRef.current) return;\n\n    logger.debug(\"Execute undoLastSave - reverting to last save point\");\n\n    suppressRecordRef.current = \"undo\";\n    lastOpRef.current = \"undo\";\n\n    // Try to undo to last checkpoint\n    const undidSomething = undoMgrRef.current.undoToLastCheckpoint();\n\n    if (!undidSomething) {\n      logger.debug(\"No changes to undo\");\n      suppressRecordRef.current = null;\n      lastOpRef.current = null;\n      return;\n    }\n\n    // Mark that we need to save these changes\n    if (!ignoreHistoryOps) {\n      historyPendingRef.current = true;\n    }\n\n    // Trigger save after a short delay\n    setTimeout(() => {\n      const currentValuesAfter = form.getValues();\n      const currentDirtyFields = form.formState.dirtyFields;\n\n      logger.debug(\"After undoLastSave, triggering save\", {\n        values: currentValuesAfter,\n        dirtyFields: currentDirtyFields,\n      });\n\n      if (!ignoreHistoryOps) {\n        debouncedSave(currentValuesAfter as T, currentDirtyFields, true);\n      }\n\n      // Reset the operation ref\n      setTimeout(() => {\n        suppressRecordRef.current = null;\n        lastOpRef.current = null;\n      }, 100);\n    }, 100);\n  }, [form, ignoreHistoryOps, debouncedSave, logger]);\n\n  const handleHydration = useCallback(\n    (data: T) => {\n      // Validate input data\n      if (!data || typeof data !== 'object') {\n        logger.error(\"Invalid data provided to handleHydration\");\n        return;\n      }\n\n      logger.debug(\"Auto-hydrating form data\", data);\n\n      isHydratingRef.current = true;\n      suppressRecordRef.current = \"hydrate\";\n\n      // Don't call form.reset() since the form is already in the correct state\n      // Just update our internal tracking\n      if (undoMgrRef.current) undoMgrRef.current.clear();\n      lastValuesRef.current = data;\n      lastRecordedValuesSigRef.current = stableStringify(data as any);\n\n      // IMPORTANT: Update baseline and saved state are handled by useAutosaveEffects\n      // which calls this function and then updates those states\n\n      suppressRecordRef.current = null;\n      Promise.resolve().then(() => {\n        isHydratingRef.current = false;\n      });\n    },\n    [logger]\n  );\n\n  // Public API\n  const undoAPI: UndoRedoAPI = useMemo(() => {\n    if (!undoEnabled || !undoMgrRef.current) {\n      return {\n        undo: undefined as unknown as () => void,\n        redo: undefined as unknown as () => void,\n        undoLastSave: undefined as unknown as () => void,\n        canUndo: false,\n        canRedo: false,\n      };\n    }\n\n    const mgr = undoMgrRef.current;\n    return {\n      undo: executeUndo,\n      redo: executeRedo,\n      undoLastSave: executeUndoLastSave,\n      canUndo: mgr.canUndo(),\n      canRedo: mgr.canRedo(),\n    };\n  }, [\n    undoEnabled,\n    executeUndo,\n    executeRedo,\n    executeUndoLastSave,\n    undoRenderTrigger,\n  ]);\n\n  const hydrateFromServer = useCallback(\n    (data: T) => {\n      // Validate input data\n      if (!data || typeof data !== 'object') {\n        logger.error(\"Invalid data provided to hydrateFromServer\");\n        return;\n      }\n\n      logger.debug(\"Manual hydration requested\", data);\n\n      isHydratingRef.current = true;\n      suppressRecordRef.current = \"hydrate\";\n\n      form.reset(data as any, {\n        keepDirty: false,\n        keepTouched: false,\n        keepValues: false,\n      });\n\n      if (undoMgrRef.current) undoMgrRef.current.clear();\n      lastValuesRef.current = data;\n      lastRecordedValuesSigRef.current = stableStringify(data as any);\n\n      // Update baseline and saved state if provided\n      if (params?.updateBaseline) {\n        params.updateBaseline(data);\n      }\n      if (params?.updateLastSavedState) {\n        params.updateLastSavedState(data);\n      }\n\n      suppressRecordRef.current = null;\n      Promise.resolve().then(() => {\n        isHydratingRef.current = false;\n      });\n    },\n    [form, logger, params]\n  );\n\n  return {\n    // API\n    undoAPI,\n    hydrateFromServer,\n    handleHydration,\n\n    // State refs (for other hooks to access)\n    lastOpRef,\n    undoAffectedFieldsRef,\n    isHydratingRef,\n    historyPendingRef,\n    noPendingGuardRef,\n    undoMgrRef,\n    lastRecordedValuesSigRef,\n\n    // State getters\n    undoEnabled,\n    ignoreHistoryOps,\n  };\n}\n","import { useRef, useCallback, useEffect } from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport type { FormSubset } from \"../../../strategies/validation/types\";\nimport type { SavePayload } from \"../../../core/types\";\nimport type { PendingState } from \"../utils/types\";\nimport { AutosaveManager } from \"../../../core/autosave\";\nimport { createLogger } from \"../../../utils/logger\";\n\n// Time to auto-clear the no-pending guard (in milliseconds)\nconst NO_PENDING_GUARD_CLEAR_DELAY = 100;\n\nexport function usePendingState<T extends FieldValues>(\n  form: FormSubset<T>,\n  manager: AutosaveManager,\n  equalsBaseline: (vals: any) => boolean,\n  ignoreHistoryOps: boolean,\n  debug?: boolean\n) {\n  const logger = createLogger(\"pending-state\", debug);\n  const debounceTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n  const lastQueuedSigRef = useRef<string>(\"\");\n  const pendingPayloadRef = useRef<SavePayload>({});\n  const historyPendingRef = useRef(false);\n  const noPendingGuardRef = useRef(false);\n  const noPendingGuardTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n  const lastSavedStateRef = useRef<string>(\"\");\n\n  const clearDebounceTimeout = useCallback(() => {\n    if (debounceTimeoutRef.current) {\n      clearTimeout(debounceTimeoutRef.current);\n      debounceTimeoutRef.current = null;\n    }\n  }, []);\n\n  const clearNoPendingGuardTimer = useCallback(() => {\n    if (noPendingGuardTimerRef.current) {\n      clearTimeout(noPendingGuardTimerRef.current);\n      noPendingGuardTimerRef.current = null;\n    }\n  }, []);\n\n  const setPendingPayload = useCallback((payload: SavePayload) => {\n    pendingPayloadRef.current = payload;\n  }, []);\n\n  const clearPendingPayload = useCallback(() => {\n    pendingPayloadRef.current = {};\n  }, []);\n\n  const setHistoryPending = useCallback((pending: boolean) => {\n    historyPendingRef.current = pending;\n  }, []);\n\n  const setNoPendingGuard = useCallback((guard: boolean) => {\n    noPendingGuardRef.current = guard;\n  }, []);\n\n  const setLastQueuedSig = useCallback((sig: string) => {\n    lastQueuedSigRef.current = sig;\n  }, []);\n\n  const setDebounceTimeout = useCallback(\n    (timeoutId: ReturnType<typeof setTimeout>) => {\n      debounceTimeoutRef.current = timeoutId;\n    },\n    []\n  );\n\n  const updateLastSavedState = useCallback(\n    (values: any) => {\n      const stableValues = JSON.stringify(\n        Object.keys(values)\n          .sort()\n          .reduce((acc, key) => {\n            acc[key] = values[key];\n            return acc;\n          }, {} as any)\n      );\n      lastSavedStateRef.current = stableValues;\n      logger.debug(\"Updated last saved state\", { stableValues });\n    },\n    [logger]\n  );\n\n  const computeHasPendingChanges = useCallback(() => {\n    const debugInfo = {\n      noPendingGuard: noPendingGuardRef.current,\n      pendingPayloadKeys: Object.keys(pendingPayloadRef.current),\n      managerEmpty: manager.isEmpty(),\n      historyPending: historyPendingRef.current,\n      ignoreHistoryOps,\n      debounceActive: !!debounceTimeoutRef.current,\n      isDirty: form.formState.isDirty,\n      dirtyFieldsCount: Object.keys(form.formState.dirtyFields).length,\n    };\n\n    logger.debug(\"[hasPendingChanges] Checking state\", debugInfo);\n\n    // If we explicitly set no pending guard, respect it\n    if (noPendingGuardRef.current) {\n      // Clear any existing guard timer\n      clearNoPendingGuardTimer();\n\n      // Auto-clear the guard after a short delay\n      noPendingGuardTimerRef.current = setTimeout(() => {\n        noPendingGuardRef.current = false;\n        noPendingGuardTimerRef.current = null;\n      }, NO_PENDING_GUARD_CLEAR_DELAY);\n\n      logger.debug(\"[hasPendingChanges] No pending guard active\", debugInfo);\n      return false;\n    }\n\n    // Check if there's an active debounce timer (save is scheduled but not executed)\n    if (debounceTimeoutRef.current) {\n      logger.debug(\n        \"[hasPendingChanges] Debounce timer active - changes pending\",\n        debugInfo\n      );\n      return true;\n    }\n\n    // Check if we have pending payload in React layer\n    const reactPending = Object.keys(pendingPayloadRef.current).length > 0;\n    if (reactPending) {\n      logger.debug(\n        \"[hasPendingChanges] React pending payload exists\",\n        debugInfo\n      );\n      return true;\n    }\n\n    // Check if manager has pending changes\n    const managerPending = !manager.isEmpty();\n    if (managerPending) {\n      logger.debug(\n        \"[hasPendingChanges] Manager has pending changes\",\n        debugInfo\n      );\n      return true;\n    }\n\n    // Check history operations if not ignoring them\n    if (!ignoreHistoryOps && historyPendingRef.current) {\n      logger.debug(\"[hasPendingChanges] History operation pending\", debugInfo);\n      return true;\n    }\n\n    // CRITICAL: Check if current values match last saved state FIRST\n    // This prevents false positives when RHF hasn't updated dirtyFields yet after save\n    if (lastSavedStateRef.current) {\n      try {\n        const currentValues = form.getValues();\n        const currentStableValues = JSON.stringify(\n          Object.keys(currentValues)\n            .sort()\n            .reduce((acc, key) => {\n              acc[key] = currentValues[key];\n              return acc;\n            }, {} as any)\n        );\n\n        if (currentStableValues === lastSavedStateRef.current) {\n          logger.debug(\n            \"[hasPendingChanges] Current values match last saved state - no pending changes\",\n            {\n              ...debugInfo,\n              currentMatchesSaved: true,\n            }\n          );\n          return false;\n        }\n      } catch (error) {\n        logger.error(\"[hasPendingChanges] Error comparing saved state\");\n      }\n    }\n\n    // Check if form has dirty fields (standard RHF dirty tracking)\n    const hasDirtyFields = Object.keys(form.formState.dirtyFields).length > 0;\n    if (hasDirtyFields) {\n      logger.debug(\"[hasPendingChanges] Form has dirty fields\", {\n        ...debugInfo,\n        dirtyFields: Object.keys(form.formState.dirtyFields),\n      });\n      return true;\n    }\n\n    // Final check: compare current values with baseline\n    try {\n      const currentValues = form.getValues();\n      const baselineEqual = equalsBaseline(currentValues);\n      logger.debug(\"[hasPendingChanges] Baseline comparison\", {\n        ...debugInfo,\n        baselineEqual,\n      });\n      return !baselineEqual;\n    } catch (error) {\n      logger.error(\"[hasPendingChanges] Error comparing with baseline\");\n      return false;\n    }\n  }, [manager, ignoreHistoryOps, form, equalsBaseline, logger, clearNoPendingGuardTimer]);\n\n  const getPendingChanges = useCallback(() => {\n    const reactPending = pendingPayloadRef.current;\n    const managerPending = manager.getPendingChanges();\n    return { ...reactPending, ...managerPending };\n  }, [manager]);\n\n  const isEmpty = useCallback(() => {\n    const reactPendingEmpty =\n      Object.keys(pendingPayloadRef.current).length === 0;\n    const managerEmpty = manager.isEmpty();\n    const debounceEmpty = !debounceTimeoutRef.current;\n    return reactPendingEmpty && managerEmpty && debounceEmpty;\n  }, [manager]);\n\n  const flush = useCallback(async () => {\n    clearDebounceTimeout();\n    if (Object.keys(pendingPayloadRef.current).length > 0) {\n      manager.queueChange(pendingPayloadRef.current);\n      pendingPayloadRef.current = {};\n    }\n    const result = await manager.flush();\n\n    // Update last saved state after successful flush\n    if (result.ok) {\n      const currentValues = form.getValues();\n      updateLastSavedState(currentValues);\n    }\n\n    return result;\n  }, [manager, clearDebounceTimeout, form, updateLastSavedState]);\n\n  const abort = useCallback(() => {\n    clearDebounceTimeout();\n    clearNoPendingGuardTimer();\n    pendingPayloadRef.current = {};\n    historyPendingRef.current = false;\n    const snap = form.getValues();\n    if (equalsBaseline(snap)) {\n      noPendingGuardRef.current = true;\n      updateLastSavedState(snap);\n    }\n    manager.abort();\n  }, [\n    manager,\n    clearDebounceTimeout,\n    clearNoPendingGuardTimer,\n    form,\n    equalsBaseline,\n    updateLastSavedState,\n  ]);\n\n  // Cleanup on unmount\n  useEffect(() => {\n    return () => {\n      clearNoPendingGuardTimer();\n    };\n  }, [clearNoPendingGuardTimer]);\n\n  return {\n    // Refs (for other hooks to access)\n    debounceTimeoutRef,\n    lastQueuedSigRef,\n    pendingPayloadRef,\n    historyPendingRef,\n    noPendingGuardRef,\n\n    // Setters\n    clearDebounceTimeout,\n    setPendingPayload,\n    clearPendingPayload,\n    setHistoryPending,\n    setNoPendingGuard,\n    setLastQueuedSig,\n    setDebounceTimeout,\n    updateLastSavedState,\n\n    // Computed values\n    computeHasPendingChanges,\n    getPendingChanges,\n    isEmpty,\n\n    // Actions\n    flush,\n    abort,\n  };\n}\n","import type { FieldValues } from \"react-hook-form\";\nimport type { ValidationStrategy, FormSubset } from \"./types\";\nimport type { SavePayload } from \"../../core/types\";\n\nexport class NoValidationStrategy<T extends FieldValues>\n  implements ValidationStrategy<T>\n{\n  async validate(): Promise<boolean> {\n    return true;\n  }\n}\n\nexport class PayloadValidationStrategy<T extends FieldValues>\n  implements ValidationStrategy<T>\n{\n  async validate(form: FormSubset<T>, payload: SavePayload): Promise<boolean> {\n    const fields = Object.keys(payload);\n    if (fields.length === 0) return true;\n\n    // Cast to any to bypass the strict typing - this is safe because we're validating existing form fields\n    return form.trigger(fields as any, { shouldFocus: false });\n  }\n}\n\nexport class AllFieldsValidationStrategy<T extends FieldValues>\n  implements ValidationStrategy<T>\n{\n  async validate(form: FormSubset<T>): Promise<boolean> {\n    return form.trigger(undefined, { shouldFocus: false });\n  }\n}\n","import type { FieldValues } from \"react-hook-form\";\nimport {\n  NoValidationStrategy,\n  PayloadValidationStrategy,\n  AllFieldsValidationStrategy,\n} from \"./strategies\";\nimport type { ValidationStrategy } from \"./types\";\n\nexport * from \"./types\";\nexport * from \"./strategies\";\n\nexport type ValidationMode = \"none\" | \"payload\" | \"all\";\n\nexport function createValidationStrategy<T extends FieldValues>(\n  mode: ValidationMode = \"payload\"\n): ValidationStrategy<T> {\n  switch (mode) {\n    case \"none\":\n      return new NoValidationStrategy<T>();\n    case \"payload\":\n      return new PayloadValidationStrategy<T>();\n    case \"all\":\n      return new AllFieldsValidationStrategy<T>();\n    default:\n      throw new Error(`Unknown validation mode: ${mode}`);\n  }\n}\n","import { useCallback, useMemo } from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport type { FormSubset } from \"../../../strategies/validation/types\";\nimport type { SavePayload } from \"../../../core/types\";\nimport type { ValidationMode } from \"../utils/types\";\nimport { AutosaveManager } from \"../../../core/autosave\";\nimport { ValidationCache } from \"../../../cache/validationCache\";\nimport { MetricsCollector } from \"../../../metrics/collector\";\nimport { stableStringify, deepEqual } from \"../utils/diff\";\nimport { createLogger, type Logger } from \"../../../utils/logger\";\nimport {\n  createValidationStrategy,\n  type ValidationStrategy,\n} from \"../../../strategies/validation\";\n\ninterface DebouncedSaveHookParams<T extends FieldValues> {\n  form: FormSubset<T>;\n  manager: AutosaveManager;\n  validationCache: ValidationCache;\n  metrics: MetricsCollector;\n  logger: Logger;\n  validateBeforeSave: ValidationMode;\n  equalsBaseline: (vals: any) => boolean;\n  getEffectiveDirtyFields: (dirty: any) => any;\n  selectPayload: (values: T, dirtyFields: any) => Partial<T>;\n  shouldSave?: (ctx: {\n    values: T;\n    isValid: boolean;\n    isDirty: boolean;\n    dirtyFields: any;\n  }) => boolean;\n  config: { debounceMs?: number };\n  // Refs from other hooks\n  debounceTimeoutRef: { current: ReturnType<typeof setTimeout> | null };\n  pendingPayloadRef: { current: SavePayload };\n  lastQueuedSigRef: { current: string };\n  historyPendingRef: { current: boolean };\n  noPendingGuardRef: { current: boolean };\n  baselineRef: { current: Record<string, any> | null };\n  lastOpRef: { current: string | null };\n  // Setters\n  setDebounceTimeout: (timeoutId: ReturnType<typeof setTimeout>) => void;\n  clearDebounceTimeout: () => void;\n  setPendingPayload: (payload: SavePayload) => void;\n  clearPendingPayload: () => void;\n  setLastQueuedSig: (sig: string) => void;\n  setHistoryPending: (pending: boolean) => void;\n  setNoPendingGuard: (guard: boolean) => void;\n  updateLastSavedState?: (values: any) => void; // NEW: Add this parameter\n}\n\nexport function useDebouncedSave<T extends FieldValues>({\n  form,\n  manager,\n  validationCache,\n  metrics,\n  logger,\n  validateBeforeSave,\n  equalsBaseline,\n  getEffectiveDirtyFields,\n  selectPayload,\n  shouldSave,\n  config,\n  debounceTimeoutRef,\n  pendingPayloadRef,\n  lastQueuedSigRef,\n  historyPendingRef,\n  noPendingGuardRef,\n  baselineRef,\n  lastOpRef,\n  setDebounceTimeout,\n  clearDebounceTimeout,\n  setPendingPayload,\n  clearPendingPayload,\n  setLastQueuedSig,\n  setHistoryPending,\n  setNoPendingGuard,\n  updateLastSavedState, // NEW: Accept this parameter\n}: DebouncedSaveHookParams<T>) {\n  const validationStrategy = useMemo(\n    () => createValidationStrategy<T>(validateBeforeSave),\n    [validateBeforeSave]\n  );\n\n  const debouncedSave = useCallback(\n    (valuesArg: T, dirtyFieldsArg: any, forceAfterUndo = false) => {\n      clearDebounceTimeout();\n\n      const timeoutId = setTimeout(async () => {\n        try {\n          // Build the payload right here, not earlier\n          let payloadToSave: SavePayload;\n\n          if (\n            forceAfterUndo &&\n            (lastOpRef.current === \"undo\" || lastOpRef.current === \"redo\")\n          ) {\n            // After undo/redo, we need to sync the server with the current form state\n            // Build payload by comparing with baseline (last saved state)\n            payloadToSave = {};\n\n            if (baselineRef.current) {\n              // Compare current values with baseline to find what changed\n              for (const key of Object.keys(valuesArg)) {\n                if (\n                  !deepEqual((valuesArg as any)[key], baselineRef.current[key])\n                ) {\n                  (payloadToSave as any)[key] = (valuesArg as any)[key];\n                }\n              }\n            } else {\n              // No baseline yet - send all current values\n              payloadToSave = valuesArg as SavePayload;\n            }\n\n            logger.debug(\n              \"Building payload after undo/redo by comparing with baseline\",\n              {\n                hasBaseline: !!baselineRef.current,\n                changedFields: Object.keys(payloadToSave),\n                payloadToSave,\n              }\n            );\n          } else {\n            const effectiveDirty = getEffectiveDirtyFields(dirtyFieldsArg);\n            payloadToSave = selectPayload(\n              valuesArg,\n              effectiveDirty\n            ) as SavePayload;\n          }\n\n          logger.debug(\"Built payload for save\", {\n            payloadKeys: Object.keys(payloadToSave),\n            payloadToSave,\n            isUndoRedo: forceAfterUndo,\n            lastOp: lastOpRef.current,\n          });\n\n          // Check if we have anything to save\n          if (Object.keys(payloadToSave).length === 0) {\n            logger.debug(\"Skipping save - empty payload\");\n            clearPendingPayload();\n            const snap = form.getValues();\n            if (equalsBaseline(snap)) {\n              setHistoryPending(false);\n              setNoPendingGuard(true);\n              // Update last saved state since we're in sync\n              if (updateLastSavedState) {\n                updateLastSavedState(snap);\n              }\n            }\n            return;\n          }\n\n          // Validation check\n          if (validateBeforeSave !== \"none\") {\n            const sig = stableStringify(payloadToSave as any);\n            let validationResult = validationCache.get(sig);\n            if (validationResult === undefined) {\n              validationResult = await validationStrategy.validate(\n                form,\n                payloadToSave\n              );\n              validationCache.set(sig, validationResult);\n              metrics.recordCacheMiss();\n            } else {\n              metrics.recordCacheHit();\n            }\n            if (!validationResult) {\n              logger.debug(\"Skipping save - validation failed\");\n              clearPendingPayload();\n              const snap = form.getValues();\n              if (equalsBaseline(snap)) {\n                setHistoryPending(false);\n                setNoPendingGuard(true);\n              }\n              return;\n            }\n          }\n\n          // Check for duplicate payload\n          const sig = stableStringify(payloadToSave as any);\n          if (sig === lastQueuedSigRef.current) {\n            logger.debug(\"Skipping save - duplicate payload\");\n            clearPendingPayload();\n            const snap = form.getValues();\n            if (equalsBaseline(snap)) {\n              setHistoryPending(false);\n              setNoPendingGuard(true);\n              // Update last saved state since we're in sync\n              if (updateLastSavedState) {\n                updateLastSavedState(snap);\n              }\n            }\n            return;\n          }\n          setLastQueuedSig(sig);\n\n          logger.debug(\"Sending payload to transport\", {\n            payloadKeys: Object.keys(payloadToSave),\n            isUndoRedo: forceAfterUndo,\n            lastOp: lastOpRef.current,\n          });\n\n          // Queue and flush immediately\n          manager.queueChange(payloadToSave);\n          const result = await manager.flush();\n\n          clearPendingPayload();\n          setHistoryPending(false);\n\n          // Update last saved state on successful save\n          if (result.ok && updateLastSavedState) {\n            const currentValues = form.getValues();\n            updateLastSavedState(currentValues);\n          }\n\n          const snapAfter = form.getValues();\n          if (equalsBaseline(snapAfter)) {\n            setNoPendingGuard(true);\n          }\n\n          if (result.ok && forceAfterUndo) {\n            lastOpRef.current = null;\n          }\n        } catch (error) {\n          logger.error(\"Error in debounced save\");\n          clearPendingPayload();\n          setHistoryPending(false);\n        }\n      }, config.debounceMs || 600);\n\n      setDebounceTimeout(timeoutId);\n    },\n    [\n      clearDebounceTimeout,\n      lastOpRef,\n      baselineRef,\n      logger,\n      getEffectiveDirtyFields,\n      selectPayload,\n      form,\n      equalsBaseline,\n      setHistoryPending,\n      setNoPendingGuard,\n      clearPendingPayload,\n      validateBeforeSave,\n      validationCache,\n      validationStrategy,\n      metrics,\n      setLastQueuedSig,\n      lastQueuedSigRef,\n      manager,\n      config.debounceMs,\n      setDebounceTimeout,\n      updateLastSavedState, // Include in dependencies\n    ]\n  );\n\n  const forceSave = useCallback(async () => {\n    logger.debug(\"Force save requested\");\n\n    // Cancel any pending debounce\n    clearDebounceTimeout();\n\n    // Clear pending payload tracking\n    clearPendingPayload();\n\n    // Get current form values\n    const currentValues = form.getValues() as T;\n\n    // Check if we already match the baseline (nothing to save)\n    if (equalsBaseline(currentValues)) {\n      logger.debug(\"Force save - already in sync with baseline\");\n      setHistoryPending(false);\n      setNoPendingGuard(true);\n      return { ok: true } as const;\n    }\n\n    // Build payload of what changed\n    let payloadToSave: SavePayload = {};\n\n    if (baselineRef.current) {\n      // Compare with baseline to find changes\n      for (const key of Object.keys(currentValues)) {\n        if (!deepEqual((currentValues as any)[key], baselineRef.current[key])) {\n          (payloadToSave as any)[key] = (currentValues as any)[key];\n        }\n      }\n    } else {\n      // No baseline yet, save everything\n      payloadToSave = currentValues as SavePayload;\n    }\n\n    // Check if we have anything to save\n    if (Object.keys(payloadToSave).length === 0) {\n      logger.debug(\"Force save - no changes detected\");\n      setHistoryPending(false);\n      setNoPendingGuard(true);\n      return { ok: true } as const;\n    }\n\n    // Check shouldSave before proceeding\n    if (shouldSave) {\n      const { isValid, isDirty, dirtyFields } = form.formState;\n      const shouldProceed = shouldSave({\n        values: currentValues,\n        isValid,\n        isDirty,\n        dirtyFields,\n      });\n\n      if (!shouldProceed) {\n        logger.debug(\"Force save blocked - shouldSave returned false\", {\n          isValid,\n          isDirty,\n          dirtyFieldsCount: Object.keys(dirtyFields).length,\n        });\n        return { ok: false, error: \"Save blocked by shouldSave\" } as const;\n      }\n    }\n\n    logger.debug(\"Force save executing\", {\n      payloadKeys: Object.keys(payloadToSave),\n      payload: payloadToSave,\n    });\n\n    // Queue and flush immediately\n    manager.queueChange(payloadToSave);\n    const result = await manager.flush();\n\n    // Update state after save\n    setHistoryPending(false);\n\n    if (result.ok) {\n      // Update last saved state on successful save\n      if (updateLastSavedState) {\n        updateLastSavedState(currentValues);\n      }\n      setNoPendingGuard(true);\n    }\n\n    return result;\n  }, [\n    logger,\n    clearDebounceTimeout,\n    clearPendingPayload,\n    form,\n    equalsBaseline,\n    baselineRef,\n    manager,\n    setHistoryPending,\n    setNoPendingGuard,\n    updateLastSavedState,\n    shouldSave,\n  ]);\n\n  return {\n    debouncedSave,\n    forceSave,\n  };\n}\n","import { useEffect, useRef } from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport type { FormSubset } from \"../../../strategies/validation/types\";\nimport type { DiffHandler } from \"../utils/types\";\nimport { ValidationCache } from \"../../../cache/validationCache\";\nimport { createLogger, type Logger } from \"../../../utils/logger\";\nimport { stableStringify } from \"../utils/diff\";\n\ninterface AutosaveEffectsParams<T extends FieldValues> {\n  form: FormSubset<T>;\n  values: T;\n  isDirty: boolean;\n  isValidating: boolean;\n  dirtyFields: any;\n  diffMap?: Record<string, DiffHandler>;\n  logger: Logger;\n  undoEnabled: boolean;\n  ignoreHistoryOps: boolean;\n  validationCache: ValidationCache;\n  debouncedSave: (values: T, dirtyFields: any, forceAfterUndo: boolean) => void;\n  shouldSave?: (ctx: {\n    values: T;\n    isValid: boolean;\n    isDirty: boolean;\n    dirtyFields: any;\n  }) => boolean;\n  autoHydrate?: boolean;\n  // State refs\n  isHydratingRef: { current: boolean };\n  isBaselineInitializedRef: { current: boolean };\n  lastOpRef: { current: string | null };\n  undoAffectedFieldsRef: { current: Set<string> };\n  historyPendingRef: { current: boolean };\n  lastRecordedValuesSigRef: { current: string };\n  // Actions\n  initializeBaseline: (values: Record<string, any>) => void;\n  resetBaseline: () => void;\n  setHistoryPending: (pending: boolean) => void;\n  clearPendingPayload: () => void;\n  setLastQueuedSig: (sig: string) => void;\n  setNoPendingGuard: (guard: boolean) => void;\n  updateLastSavedState?: (values: any) => void;\n  isEmpty: () => boolean; // Check if manager queue is empty\n  // Hydration action\n  handleHydration: (data: T) => void;\n  // Undo manager ref\n  undoMgrRef: { current: any };\n}\n\nexport function useAutosaveEffects<T extends FieldValues>({\n  form,\n  values,\n  isDirty,\n  isValidating,\n  dirtyFields,\n  diffMap,\n  logger,\n  undoEnabled,\n  ignoreHistoryOps,\n  validationCache,\n  debouncedSave,\n  shouldSave,\n  autoHydrate = true,\n  isHydratingRef,\n  isBaselineInitializedRef,\n  lastOpRef,\n  undoAffectedFieldsRef,\n  historyPendingRef,\n  lastRecordedValuesSigRef,\n  initializeBaseline,\n  resetBaseline,\n  setHistoryPending,\n  clearPendingPayload,\n  setLastQueuedSig,\n  setNoPendingGuard,\n  updateLastSavedState,\n  isEmpty,\n  handleHydration,\n  undoMgrRef,\n}: AutosaveEffectsParams<T>) {\n  // Track previous state to detect hydration\n  const prevIsDirtyRef = useRef(isDirty);\n  const prevValuesRef = useRef(values);\n  const isInitialMountRef = useRef(true);\n\n  // Auto-hydration effect - detects when form gets reset with new data\n  useEffect(() => {\n    if (!autoHydrate) return;\n\n    // Skip on initial mount\n    if (isInitialMountRef.current) {\n      isInitialMountRef.current = false;\n      prevIsDirtyRef.current = isDirty;\n      prevValuesRef.current = values;\n      return;\n    }\n\n    const wasDirty = prevIsDirtyRef.current;\n    const isNowClean = !isDirty;\n    const valuesChanged =\n      stableStringify(values as any) !==\n      stableStringify(prevValuesRef.current as any);\n    const hasNoErrors = Object.keys(form.formState.errors || {}).length === 0;\n\n    // Detect hydration scenario:\n    // 1. Form went from dirty to clean (or was already clean)\n    // 2. Values actually changed\n    // 3. No validation errors (indicates successful data load)\n    // 4. Not currently hydrating (prevent loops)\n    // 5. No pending saves in progress (prevent data loss)\n    const queueIsEmpty = isEmpty();\n    if (isNowClean && valuesChanged && hasNoErrors && !isHydratingRef.current && queueIsEmpty) {\n      logger.debug(\"Auto-detecting form hydration\", {\n        wasDirty,\n        isNowClean,\n        valuesChanged,\n        queueIsEmpty,\n        newValues: values,\n      });\n\n      // Handle hydration\n      handleHydration(values);\n\n      // CRITICAL: Update baseline with hydrated values\n      initializeBaseline(values as any);\n      isBaselineInitializedRef.current = true;\n\n      // CRITICAL: Update last saved state with hydrated values\n      if (updateLastSavedState) {\n        updateLastSavedState(values);\n      }\n\n      // Clear any pending changes since we're now in sync with server\n      clearPendingPayload();\n      setLastQueuedSig(\"\");\n      setNoPendingGuard(true);\n    }\n\n    // Update previous state\n    prevIsDirtyRef.current = isDirty;\n    prevValuesRef.current = values;\n  }, [\n    autoHydrate,\n    isDirty,\n    values,\n    form.formState.errors,\n    isHydratingRef,\n    isEmpty,\n    logger,\n    handleHydration,\n    initializeBaseline,\n    isBaselineInitializedRef,\n    updateLastSavedState,\n    clearPendingPayload,\n    setLastQueuedSig,\n    setNoPendingGuard,\n  ]);\n\n  // Initialize baseline once, from clean state (but skip if hydration handled it)\n  useEffect(() => {\n    if (!diffMap && !undoEnabled) return;\n\n    if (\n      !isDirty &&\n      !isBaselineInitializedRef.current &&\n      !isHydratingRef.current\n    ) {\n      const currentValues = form.getValues() as any;\n      logger.debug(\n        \"Initializing baseline from clean form state\",\n        currentValues\n      );\n      initializeBaseline(currentValues);\n\n      // Also update last saved state\n      if (updateLastSavedState) {\n        updateLastSavedState(currentValues);\n      }\n    }\n  }, [\n    isDirty,\n    diffMap,\n    undoEnabled,\n    form,\n    logger,\n    initializeBaseline,\n    isBaselineInitializedRef,\n    isHydratingRef,\n    updateLastSavedState,\n  ]);\n\n  // When form becomes clean (e.g., after reset), reset baseline\n  useEffect(() => {\n    if (!isDirty && Object.keys(dirtyFields).length === 0) {\n      // Only reset if we're not hydrating (hydration handles its own baseline)\n      if (!isHydratingRef.current) {\n        // Don't reset baseline here - it should stay as the last saved state\n        // isBaselineInitializedRef.current = false;\n        // resetBaseline();\n        undoAffectedFieldsRef.current.clear();\n      }\n    }\n  }, [\n    isDirty,\n    dirtyFields,\n    resetBaseline,\n    isBaselineInitializedRef,\n    undoAffectedFieldsRef,\n    isHydratingRef,\n  ]);\n\n  // Clear undo affected fields after successful save\n  useEffect(() => {\n    if (lastOpRef.current === \"undo\" || lastOpRef.current === \"redo\") {\n      setTimeout(() => {\n        undoAffectedFieldsRef.current.clear();\n        lastOpRef.current = null;\n      }, 100);\n    } else if (lastOpRef.current === null) {\n      undoAffectedFieldsRef.current.clear();\n    }\n  }, [lastOpRef, undoAffectedFieldsRef]);\n\n  // Main autosave effect\n  useEffect(() => {\n    if (isHydratingRef.current) {\n      logger.debug(\"Skipping save - hydrating from server\");\n      return;\n    }\n\n    if (lastOpRef.current === \"revert\") {\n      logger.debug(\"Skipping save - reverting failed changes\");\n      return;\n    }\n\n    if (isValidating) {\n      logger.debug(\"Skipping save - form is validating\");\n      return;\n    }\n\n    if (diffMap && !isBaselineInitializedRef.current) {\n      logger.debug(\"Skipping save - baseline not initialized yet\");\n      return;\n    }\n\n    const isUndoRedo =\n      lastOpRef.current === \"undo\" || lastOpRef.current === \"redo\";\n    const hasUserChanges = Object.keys(dirtyFields).length > 0 || isDirty;\n\n    if (isUndoRedo && undoEnabled && !ignoreHistoryOps) {\n      logger.debug(\"Triggering save after undo/redo operation\", {\n        affectedFields: Array.from(undoAffectedFieldsRef.current),\n      });\n\n      // make it pending before debounce enqueues anything\n      setHistoryPending(true);\n\n      setTimeout(() => {\n        const currentValues = form.getValues();\n        const currentDirtyFields = form.formState.dirtyFields;\n        debouncedSave(currentValues as T, currentDirtyFields, true);\n      }, 10);\n      return;\n    }\n\n    if (!isUndoRedo && hasUserChanges) {\n      // Check shouldSave before triggering autosave\n      if (shouldSave) {\n        const { isValid } = form.formState;\n        const shouldProceed = shouldSave({\n          values,\n          isValid,\n          isDirty,\n          dirtyFields,\n        });\n\n        if (!shouldProceed) {\n          logger.debug(\"Skipping save - shouldSave returned false\", {\n            dirtyFields: Object.keys(dirtyFields),\n            isDirty,\n            isValid,\n          });\n          return;\n        }\n      }\n\n      logger.debug(\"Triggering save for user changes\", {\n        dirtyFields: Object.keys(dirtyFields),\n        isDirty,\n      });\n      debouncedSave(values, dirtyFields, false);\n    }\n  }, [\n    values,\n    dirtyFields,\n    isDirty,\n    isValidating,\n    debouncedSave,\n    shouldSave,\n    diffMap,\n    logger,\n    undoEnabled,\n    ignoreHistoryOps,\n    form,\n    isHydratingRef,\n    isBaselineInitializedRef,\n    lastOpRef,\n    undoAffectedFieldsRef,\n    setHistoryPending,\n  ]);\n\n  // Clear caches when clean\n  useEffect(() => {\n    if (Object.keys(dirtyFields).length === 0 && !isDirty) {\n      validationCache.clear();\n      setLastQueuedSig(\"\");\n      // Don't clear pending payload here - let the save logic handle it\n      undoAffectedFieldsRef.current.clear();\n    }\n  }, [\n    dirtyFields,\n    isDirty,\n    validationCache,\n    setLastQueuedSig,\n    undoAffectedFieldsRef,\n  ]);\n\n  // Cleanup effect\n  useEffect(() => {\n    return () => {\n      // Cleanup is handled by individual hooks that manage their own resources\n    };\n  }, []);\n}\n","\"use client\";\n\nimport { useEffect, useReducer, useMemo, useCallback } from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\n\nimport { AutosaveManager } from \"../../core/autosave\";\nimport { autosaveReducer, initialAutosaveState } from \"../../state/reducer\";\nimport type { Transport, SavePayload } from \"../../core/types\";\nimport {\n  createValidationStrategy,\n  type ValidationMode,\n} from \"../../strategies/validation\";\nimport { ValidationCache } from \"../../cache/validationCache\";\nimport { PayloadCache } from \"../../cache/payloadCache\";\nimport { MetricsCollector } from \"../../metrics/collector\";\nimport { createLogger } from \"../../utils/logger\";\nimport type { AutosaveConfig } from \"../../config/schema\";\n\n// Import our modular hooks and utilities\nimport type {\n  RhfAutosaveOptions,\n  AutosaveReturn,\n  DiffHandler,\n  UndoOptions,\n} from \"./utils/types\";\nimport {\n  createDefaultSelectPayload,\n  createDefaultShouldSave,\n  createEffectiveDirtyFieldsGetter,\n} from \"./utils/transforms\";\nimport { createComposedTransport } from \"./utils/composeTransport\";\nimport { useBaseline } from \"./hooks/useBaseline\";\nimport { useUndoRedo } from \"./hooks/useUndoRedo\";\nimport { usePendingState } from \"./hooks/usePendingState\";\nimport { useDebouncedSave } from \"./hooks/useDebouncedSave\";\nimport { useAutosaveEffects } from \"./hooks/useAutosaveEffects\";\n\nexport function useRhfAutosave<T extends FieldValues>(\n  options: RhfAutosaveOptions<T>\n): AutosaveReturn {\n  const {\n    form,\n    transport: baseTransport,\n    config = {},\n    selectPayload: userSelectPayload,\n    shouldSave: userShouldSave,\n    onSaved,\n    keyMap,\n    mapPayload,\n    validateBeforeSave = \"payload\",\n    diffMap,\n    undo,\n    autoHydrate = true,\n  } = options;\n\n  const undoEnabled = !!undo?.enabled;\n  const ignoreHistoryOps = undo?.ignoreHistoryOps ?? false;\n\n  // Initialize state and caches\n  const [state, dispatch] = useReducer(autosaveReducer, initialAutosaveState);\n  const validationCache = useMemo(() => new ValidationCache(), []);\n  const payloadCache = useMemo(() => new PayloadCache(), []);\n  const metrics = useMemo(() => new MetricsCollector(), []);\n  const logger = useMemo(\n    () => createLogger(\"rhf\", config.debug),\n    [config.debug]\n  );\n\n  // Get form state\n  const values = form.watch();\n  const { isDirty, isValid, dirtyFields, isValidating } = form.formState;\n\n  // Initialize baseline management\n  const baseline = useBaseline(form, diffMap, undoEnabled, config.debug);\n\n  // Initialize autosave manager FIRST (with dummy transport, will be updated)\n  const manager = useMemo(\n    () =>\n      new AutosaveManager(\n        async () => ({ ok: true }), // Temporary transport\n        config.debounceMs || 600,\n        logger\n      ),\n    [config.debounceMs, logger]\n  );\n\n  // NOW initialize pending state with the actual manager\n  const pendingState = usePendingState(\n    form,\n    manager,\n    baseline.equalsBaseline,\n    ignoreHistoryOps,\n    config.debug\n  );\n\n  // Initialize effective dirty fields getter\n  const getEffectiveDirtyFields = useMemo(\n    () =>\n      createEffectiveDirtyFieldsGetter(\n        undoEnabled,\n        { current: null },\n        { current: new Set() }\n      ),\n    [undoEnabled]\n  );\n\n  // Create payload selector\n  const selectPayload = useMemo(() => {\n    if (userSelectPayload) return userSelectPayload;\n    return createDefaultSelectPayload<T>(\n      getEffectiveDirtyFields,\n      diffMap,\n      baseline.baselineRef,\n      { current: null } // Will be connected to undo hook\n    );\n  }, [\n    userSelectPayload,\n    getEffectiveDirtyFields,\n    diffMap,\n    baseline.baselineRef,\n  ]);\n\n  // Create shouldSave function\n  const shouldSave = useMemo(() => {\n    if (userShouldSave) return userShouldSave;\n    return createDefaultShouldSave<T>(\n      getEffectiveDirtyFields,\n      baseline.baselineRef,\n      { current: null } // Will be connected to undo hook\n    );\n  }, [userShouldSave, getEffectiveDirtyFields, baseline.baselineRef]);\n\n  // Initialize debounced save (needs to be before undo/redo)\n  const debouncedSaveHook = useDebouncedSave({\n    form,\n    manager,\n    validationCache,\n    metrics,\n    logger,\n    validateBeforeSave,\n    equalsBaseline: baseline.equalsBaseline,\n    getEffectiveDirtyFields,\n    selectPayload,\n    shouldSave,\n    config,\n    ...pendingState,\n    baselineRef: baseline.baselineRef,\n    lastOpRef: { current: null }, // Will be connected to undo hook\n  });\n\n  // Initialize undo/redo (this needs to be after debouncedSave)\n  const undoRedo = useUndoRedo(\n    form,\n    undo,\n    ignoreHistoryOps,\n    baseline.equalsBaseline,\n    debouncedSaveHook.debouncedSave,\n    shouldSave,\n    config.debug,\n    {\n      updateBaseline: baseline.initializeBaseline,\n      updateLastSavedState: pendingState.updateLastSavedState,\n    }\n  );\n\n  // Create composed transport with all refs (needs to be after undo/redo for refs)\n  const composedTransport = useMemo(\n    () =>\n      createComposedTransport({\n        baseTransport,\n        diffMap,\n        keyMap,\n        mapPayload,\n        updateBaseline: baseline.updateBaseline,\n        undoEnabled,\n        undoMgrRef: undoRedo.undoMgrRef,\n        onSaved,\n        metrics,\n        logger,\n        baselineRef: baseline.baselineRef,\n        lastOpRef: undoRedo.lastOpRef,\n        undoAffectedFieldsRef: undoRedo.undoAffectedFieldsRef,\n        dispatch,\n        form,\n        updateLastSavedState: pendingState.updateLastSavedState,\n        isHydratingRef: undoRedo.isHydratingRef,\n        clearDebounceTimeout: pendingState.clearDebounceTimeout,\n      }),\n    [\n      baseTransport,\n      diffMap,\n      keyMap,\n      mapPayload,\n      baseline.updateBaseline,\n      undoEnabled,\n      undoRedo.undoMgrRef,\n      onSaved,\n      metrics,\n      logger,\n      baseline.baselineRef,\n      undoRedo.lastOpRef,\n      undoRedo.undoAffectedFieldsRef,\n      form,\n      pendingState.updateLastSavedState,\n      undoRedo.isHydratingRef,\n      pendingState.clearDebounceTimeout,\n      dispatch,\n    ]\n  );\n\n  // Update manager's transport to use the composed one\n  useEffect(() => {\n    (manager as any).transport = composedTransport;\n  }, [manager, composedTransport]);\n\n  // Now connect the lastOpRef to the selectPayload and shouldSave\n  const finalSelectPayload = useMemo(() => {\n    if (userSelectPayload) return userSelectPayload;\n    return createDefaultSelectPayload<T>(\n      getEffectiveDirtyFields,\n      diffMap,\n      baseline.baselineRef,\n      undoRedo.lastOpRef\n    );\n  }, [\n    userSelectPayload,\n    getEffectiveDirtyFields,\n    diffMap,\n    baseline.baselineRef,\n    undoRedo.lastOpRef,\n  ]);\n\n  const finalShouldSave = useMemo(() => {\n    if (userShouldSave) return userShouldSave;\n    return createDefaultShouldSave<T>(\n      getEffectiveDirtyFields,\n      baseline.baselineRef,\n      undoRedo.lastOpRef\n    );\n  }, [\n    userShouldSave,\n    getEffectiveDirtyFields,\n    baseline.baselineRef,\n    undoRedo.lastOpRef,\n  ]);\n\n  // Initialize autosave effects\n  useAutosaveEffects({\n    form,\n    values,\n    isDirty,\n    isValidating,\n    dirtyFields,\n    diffMap,\n    logger,\n    undoEnabled,\n    ignoreHistoryOps,\n    validationCache,\n    debouncedSave: debouncedSaveHook.debouncedSave,\n    shouldSave: finalShouldSave,\n    isHydratingRef: undoRedo.isHydratingRef,\n    isBaselineInitializedRef: baseline.isBaselineInitializedRef,\n    lastOpRef: undoRedo.lastOpRef,\n    undoAffectedFieldsRef: undoRedo.undoAffectedFieldsRef,\n    historyPendingRef: undoRedo.historyPendingRef,\n    initializeBaseline: baseline.initializeBaseline,\n    resetBaseline: baseline.resetBaseline,\n    setHistoryPending: pendingState.setHistoryPending,\n    clearPendingPayload: pendingState.clearPendingPayload,\n    setLastQueuedSig: pendingState.setLastQueuedSig,\n    setNoPendingGuard: pendingState.setNoPendingGuard,\n    updateLastSavedState: pendingState.updateLastSavedState,\n    isEmpty: pendingState.isEmpty,\n    autoHydrate,\n    lastRecordedValuesSigRef: undoRedo.lastRecordedValuesSigRef,\n    handleHydration: undoRedo.handleHydration,\n    undoMgrRef: undoRedo.undoMgrRef,\n  });\n\n  // Cleanup effect\n  useEffect(() => {\n    return () => {\n      pendingState.clearDebounceTimeout();\n      manager.abort();\n    };\n  }, [manager, pendingState]);\n\n  // Return the complete API\n  return {\n    // Status\n    isSaving: state.isSaving,\n    lastError: state.lastError,\n    metrics: state.metrics,\n\n    // Pending - Now using the accurate computation\n    hasPendingChanges: pendingState.computeHasPendingChanges(),\n\n    // Actions\n    flush: debouncedSaveHook.forceSave, // flush and forceSave are the same\n    abort: pendingState.abort,\n    forceSave: debouncedSaveHook.forceSave,\n\n    // Baseline (diffMap) helpers\n    forceBaselineUpdate: baseline.forceBaselineUpdate,\n    getBaseline: baseline.getBaseline,\n    isBaselineInitialized: baseline.isBaselineInitialized,\n\n    // Metrics / debug\n    getMetrics: useCallback(() => metrics.getMetrics(), [metrics]),\n    getCacheStats: useCallback(\n      () => ({\n        validationCacheSize: validationCache.size(),\n        payloadCacheSize: payloadCache.size(),\n      }),\n      [validationCache, payloadCache]\n    ),\n    getPendingChanges: pendingState.getPendingChanges,\n    isEmpty: pendingState.isEmpty,\n\n    // Undo/redo\n    undo: undoRedo.undoAPI.undo,\n    redo: undoRedo.undoAPI.redo,\n    undoLastSave: undoRedo.undoAPI.undoLastSave,\n    canUndo: undoRedo.undoAPI.canUndo,\n    canRedo: undoRedo.undoAPI.canRedo,\n\n    // Hydrate safely from server\n    hydrateFromServer: undoRedo.hydrateFromServer,\n  } as const;\n}\n\n// Re-export types for convenience\nexport type {\n  RhfAutosaveOptions,\n  DiffHandler,\n  UndoOptions,\n  AutosaveReturn,\n} from \"./utils/types\";\n","import { SavePayload, SaveResult, Transport } from \"../../core/types\";\n\n/**\n * Wrap a tRPC mutation as an autosave `Transport`.\n *\n * This lets you pass a tRPC mutation directly into `useRhfAutosave` or `useAutosaveEngine`.\n *\n * @example\n * ```ts\n * const mutation = api.regulation.update.useMutation();\n * const transport = trpcTransport(mutation);\n *\n * useRhfAutosave({\n *   form,\n *   transport,\n * });\n * ```\n *\n * @typeParam TInput - Input shape expected by the tRPC mutation.\n */\nexport function trpcTransport<TInput extends object = SavePayload>(mutation: {\n  mutateAsync: (input: TInput, opts?: any) => Promise<any>;\n}): Transport {\n  return async (payload, ctx) => {\n    try {\n      const res = await mutation.mutateAsync(payload as TInput, {\n        signal: ctx?.signal,\n      });\n\n      // TypeScript infers this matches SaveResult\n      return { ok: true, version: (res as any)?.version };\n    } catch (e: any) {\n      // TypeScript infers this matches SaveResult\n      return {\n        ok: false,\n        error: e instanceof Error ? e : new Error(String(e)),\n      };\n    }\n  };\n}\n","import type {\n  Transport,\n  SaveResult,\n  SavePayload,\n  SaveContext,\n} from \"../../core/types\";\nimport { TransportError } from \"../../core/errors\";\nimport { Logger } from \"../../utils/logger\";\n\nexport interface RetryConfig {\n  maxRetries: number;\n  baseDelayMs: number;\n  maxDelayMs: number;\n  backoffFactor: number;\n}\n\nexport function withRetry(\n  transport: Transport,\n  config: Partial<RetryConfig> = {},\n  logger?: Logger\n): Transport {\n  const {\n    maxRetries = 3,\n    baseDelayMs = 1000,\n    maxDelayMs = 10000,\n    backoffFactor = 2,\n  } = config;\n\n  return async (\n    payload: SavePayload,\n    ctx?: SaveContext\n  ): Promise<SaveResult> => {\n    let lastError: Error | undefined;\n    const retryCount = ctx?.retryCount || 0;\n\n    for (let attempt = 0; attempt <= maxRetries; attempt++) {\n      try {\n        const result = await transport(payload, {\n          ...ctx,\n          retryCount: retryCount + attempt,\n        });\n\n        if (result.ok) {\n          if (attempt > 0) {\n            logger?.info(`Transport succeeded after ${attempt} retries`);\n          }\n          return result;\n        } else {\n          lastError = result.error;\n          if (attempt === maxRetries) break;\n        }\n      } catch (error) {\n        lastError = error instanceof Error ? error : new Error(String(error));\n        if (attempt === maxRetries) break;\n      }\n\n      if (ctx?.signal?.aborted) {\n        return { ok: false, error: new TransportError(\"Operation aborted\") };\n      }\n\n      const delay = Math.min(\n        baseDelayMs * Math.pow(backoffFactor, attempt),\n        maxDelayMs\n      );\n\n      logger?.debug(\n        `Transport attempt ${attempt + 1} failed, retrying in ${delay}ms`\n      );\n      await new Promise((resolve) => setTimeout(resolve, delay));\n    }\n\n    return {\n      ok: false,\n      error: new TransportError(\n        `Transport failed after ${maxRetries + 1} attempts`,\n        lastError\n      ),\n    };\n  };\n}\n","import type {\n  Transport,\n  SaveResult,\n  SavePayload,\n  SaveContext,\n} from \"../../core/types\";\n\nexport function composeTransports(...transports: Transport[]): Transport {\n  if (transports.length === 0) {\n    throw new Error(\"At least one transport is required\");\n  }\n\n  if (transports.length === 1) {\n    return transports[0];\n  }\n\n  return async (\n    payload: SavePayload,\n    ctx?: SaveContext\n  ): Promise<SaveResult> => {\n    for (const transport of transports) {\n      const result = await transport(payload, ctx);\n      if (!result.ok) {\n        return result;\n      }\n    }\n    return { ok: true };\n  };\n}\n\nexport function parallelTransports(...transports: Transport[]): Transport {\n  return async (\n    payload: SavePayload,\n    ctx?: SaveContext\n  ): Promise<SaveResult> => {\n    const results = await Promise.allSettled(\n      transports.map((transport) => transport(payload, ctx))\n    );\n\n    const failures: Error[] = [];\n\n    for (const result of results) {\n      if (result.status === \"rejected\") {\n        failures.push(result.reason);\n      } else if (!result.value.ok) {\n        failures.push(result.value.error);\n      }\n    }\n\n    if (failures.length > 0) {\n      return {\n        ok: false,\n        error: new Error(\n          `${failures.length} transports failed: ${failures\n            .map((e) => e.message)\n            .join(\", \")}`\n        ),\n      };\n    }\n\n    return { ok: true };\n  };\n}\n","export interface DebouncedFunction<T extends (...args: any[]) => any> {\n  (...args: Parameters<T>): void;\n  cancel(): void;\n  flush(): ReturnType<T> | undefined;\n  pending(): boolean;\n}\n\nexport function debounce<T extends (...args: any[]) => any>(\n  func: T,\n  waitMs: number,\n  timer = { setTimeout, clearTimeout }\n): DebouncedFunction<T> {\n  let timeoutId: ReturnType<typeof setTimeout> | null = null;\n  let lastArgs: Parameters<T> | null = null;\n\n  const debouncedFn = (...args: Parameters<T>): void => {\n    lastArgs = args;\n\n    if (timeoutId) {\n      timer.clearTimeout(timeoutId);\n    }\n\n    timeoutId = timer.setTimeout(() => {\n      timeoutId = null;\n      if (lastArgs) {\n        func(...lastArgs);\n        lastArgs = null;\n      }\n    }, waitMs);\n  };\n\n  debouncedFn.cancel = (): void => {\n    if (timeoutId) {\n      timer.clearTimeout(timeoutId);\n      timeoutId = null;\n    }\n    lastArgs = null;\n  };\n\n  debouncedFn.flush = (): ReturnType<T> | undefined => {\n    if (timeoutId) {\n      timer.clearTimeout(timeoutId);\n      timeoutId = null;\n    }\n\n    if (lastArgs) {\n      const result = func(...lastArgs);\n      lastArgs = null;\n      return result;\n    }\n\n    return undefined;\n  };\n\n  debouncedFn.pending = (): boolean => {\n    return timeoutId !== null;\n  };\n\n  return debouncedFn;\n}\n","import type { FieldValues } from \"react-hook-form\";\nimport type { SaveResult, Transport, SavePayload } from \"../core/types\";\nimport type { FormSubset } from \"../strategies/validation/types\";\n\n/* -----------------------------\n * Mock Transport\n * ----------------------------- */\nexport function createMockTransport(\n  responses: SaveResult[] = [{ ok: true }]\n): Transport & { getCalls: () => SavePayload[] } {\n  const calls: SavePayload[] = [];\n  let callCount = 0;\n\n  const transport: Transport = async (payload) => {\n    calls.push(payload);\n    const response = responses[Math.min(callCount, responses.length - 1)];\n    callCount++;\n    return response;\n  };\n\n  return Object.assign(transport, {\n    getCalls: () => [...calls],\n  });\n}\n\n/* -----------------------------\n * Mock FormSubset<T>\n * - getValues(name?) supported\n * - setValue(...) stubbed\n * - register(...) stubbed\n * ----------------------------- */\nexport function createMockForm<T extends FieldValues>(\n  overrides: Partial<FormSubset<T>> = {}\n): FormSubset<T> {\n  // Minimal register stub compatible with RHF\n  const registerStub = ((name: any) => {\n    // You can enhance this if a test needs specific behavior\n    return {\n      name,\n      onChange: jest.fn(),\n      onBlur: jest.fn(),\n      ref: jest.fn(),\n    } as any;\n  }) as FormSubset<T>[\"register\"];\n\n  // getValues that supports both 0-arg and 1-arg forms\n  const getValuesStub = ((name?: any) => {\n    // If a single path is requested, return undefined by default\n    if (typeof name === \"string\") return undefined as any;\n    // No args -> return the whole values object\n    return {} as T;\n  }) as FormSubset<T>[\"getValues\"];\n\n  // setValue stub – records calls, no side effects by default\n  const setValueStub = jest.fn((_: any, __: any, ___?: any) => {\n    // no-op\n  }) as unknown as FormSubset<T>[\"setValue\"];\n\n  // watch stub – simplest: return whole values when called without args\n  const watchStub = jest.fn(\n    (_: any) => ({} as T)\n  ) as unknown as FormSubset<T>[\"watch\"];\n\n  const triggerStub = jest.fn(() =>\n    Promise.resolve(true)\n  ) as unknown as FormSubset<T>[\"trigger\"];\n\n  return {\n    watch: watchStub,\n    formState: {\n      isDirty: false,\n      isValid: true,\n      dirtyFields: {},\n      isValidating: false,\n    },\n    // Some suites use reset/trigger; keep them available (even if not in FormSubset)\n    reset: jest.fn(),\n    trigger: triggerStub,\n\n    // Updated/added to satisfy new FormSubset<T> needs\n    getValues: getValuesStub,\n    setValue: setValueStub,\n    register: registerStub,\n\n    // Allow tests to override any of the above\n    ...overrides,\n  } as FormSubset<T>;\n}\n\n/* -----------------------------\n * Mock timer utilities\n * ----------------------------- */\nexport class MockTimer {\n  private timers = new Map<number, { callback: () => void; delay: number }>();\n  private nextId = 1;\n\n  setTimeout = (callback: () => void, delay: number): number => {\n    const id = this.nextId++;\n    this.timers.set(id, { callback, delay });\n    return id;\n  };\n\n  clearTimeout = (id: number): void => {\n    this.timers.delete(id);\n  };\n\n  tick = (ms: number): void => {\n    for (const [id, timer] of this.timers.entries()) {\n      if (timer.delay <= ms) {\n        timer.callback();\n        this.timers.delete(id);\n      } else {\n        timer.delay -= ms;\n      }\n    }\n  };\n\n  flush = (): void => {\n    const callbacks = Array.from(this.timers.values()).map((t) => t.callback);\n    this.timers.clear();\n    callbacks.forEach((cb) => cb());\n  };\n\n  hasPendingTimers = (): boolean => {\n    return this.timers.size > 0;\n  };\n}\n\nexport function waitFor(ms: number): Promise<void> {\n  return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport async function waitForCondition(\n  condition: () => boolean,\n  timeoutMs = 5000,\n  intervalMs = 10\n): Promise<void> {\n  const start = Date.now();\n\n  while (!condition() && Date.now() - start < timeoutMs) {\n    await waitFor(intervalMs);\n  }\n\n  if (!condition()) {\n    throw new Error(`Condition not met within ${timeoutMs}ms`);\n  }\n}\n","import type {\n  FieldPath,\n  PendingChanges,\n  UndoRedoOptions,\n} from \"../types/types\";\n\nexport function isPending(\n  name: FieldPath,\n  currentValue: unknown,\n  opts: UndoRedoOptions\n): boolean {\n  const initial = opts.get(opts.initialValuesRef.current, name);\n  return !opts.deepEqual(currentValue, initial);\n}\n\nexport function reconcilePendingField(\n  name: FieldPath,\n  currentValue: unknown,\n  pending: PendingChanges,\n  opts: UndoRedoOptions\n) {\n  if (isPending(name, currentValue, opts)) {\n    pending.add(name);\n  } else {\n    pending.delete(name);\n  }\n}\n"]}