{"version":3,"sources":["../src/ecommerce/widget.js"],"names":["createBrowserChatRuntime","normalizeChatUI"],"mappings":";;;;;;CAIC,MAAM;AACL,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,OAAO,mBAAmB,WAAA,EAAa;AAE5E,EAAA,MAAM,GAAA,GAAM,4BAAA;AACZ,EAAA,IAAI,cAAA,CAAe,GAAA,CAAI,GAAG,CAAA,EAAG;AAE7B,EAAA,MAAM,+BAAA,GAAkC,KAAK,EAAA,GAAK,EAAA;AAClD,EAAA,MAAM,2BAAA,GAA8B,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,EAAA;AACnD,EAAA,MAAM,4BAAA,GAA+B,GAAA;AACrC,EAAA,MAAM,wBAAA,GAA2B,GAAA;AACjC,EAAA,MAAM,SAAA,GACJ,oFAAA;AACF,EAAA,MAAM,aAAA,GACJ,0KAAA;AACF,EAAA,MAAM,eAAA,GACJ,0KAAA;AACF,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,KAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,OAAO,CAAC,KAAA,KACZ,MAAA,CAAO,KAAA,IAAS,EAAE,CAAA,CAAE,OAAA;AAAA,IAClB,UAAA;AAAA,IACA,CAAC,SAAA,KAAA,CACE,EAAE,GAAA,EAAK,SAAS,GAAA,EAAK,MAAA,EAAQ,GAAA,EAAK,MAAA,EAAQ,GAAA,EAAK,OAAA,EAAS,GAAA,EAAK,QAAA,IAAY,SAAS;AAAA,GACvF;AACF,EAAA,MAAM,SAAA,GAAY,CAAC,KAAA,KACjB,MAAA,CAAO,KAAA,IAAS,EAAE,CAAA,CACf,IAAA,EAAK,CACL,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAA;AACvB,EAAA,MAAM,SAAA,GAAY,CAAC,KAAA,KACjB,MAAA,CAAO,SAAS,EAAE,CAAA,CACf,OAAA,CAAQ,UAAA,EAAY,GAAG,CAAA,CACvB,OAAA,CAAQ,MAAA,EAAQ,GAAG,EACnB,IAAA,EAAK;AACV,EAAA,MAAM,eAAA,GAAkB,CAAC,KAAA,KAAU;AACjC,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,KAAA,IAAS,EAAE,CAAA;AAC9B,IAAA,MAAM,kBAAkB,GAAA,CAAI,KAAA;AAAA,MAC1B;AAAA,KACF;AACA,IAAA,OAAO,SAAA,CAAU,eAAA,GAAkB,CAAC,CAAA,IAAK,GAAG,CAAA;AAAA,EAC9C,CAAA;AACA,EAAA,MAAM,QAAA,GAAW,CAAC,KAAA,KAAU;AAC1B,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,MAAA,CAAO,KAAA,IAAS,EAAE,CAAA,CAAE,IAAA,EAAK,EAAG,QAAA,CAAS,IAAI,CAAA;AAChE,MAAA,OAAO,OAAO,QAAA,KAAa,QAAA,IAAY,OAAO,QAAA,KAAa,OAAA,GAAU,OAAO,IAAA,GAAO,EAAA;AAAA,IACrF,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,EAAA;AAAA,IACT;AAAA,EACF,CAAA;AACA,EAAA,MAAM,UAAA,GAAa,CAAC,KAAA,EAAO,QAAA,KAAa;AACtC,IAAA,IAAI,CAAC,OAAO,OAAO,QAAA;AACnB,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAC/B,MAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,GAAI,OAAO,GAAA,CAAI,SAAS,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,GAAI,QAAA;AAAA,IACrF,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,SAAS,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AAAA,IACnE;AAAA,EACF,CAAA;AACA,EAAA,MAAM,SAAA,GAAY,CAAC,KAAA,KAAU;AAC3B,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,KAAA,IAAS,IAAI,CAAA;AACvC,MAAA,IAAI,CAAC,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,IAAY,MAAM,OAAA,CAAQ,MAAM,CAAA,EAAG,OAAO,EAAC;AAC5E,MAAA,OAAO,MAAA,CAAO,WAAA;AAAA,QACZ,OAAO,OAAA,CAAQ,MAAM,CAAA,CAClB,KAAA,CAAM,GAAG,EAAE,CAAA,CACX,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,MAAM,CAAC,SAAA,CAAU,GAAG,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,GAAG,GAAG,SAAA,CAAU,KAAK,CAAA,CAAE,KAAA,CAAM,GAAG,GAAG,CAAC,CAAC,CAAA,CACpF,OAAO,CAAC,CAAC,KAAK,KAAK,CAAA,KAAM,OAAO,KAAK;AAAA,OAC1C;AAAA,IACF,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,EAAC;AAAA,IACV;AAAA,EACF,CAAA;AACA,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAAU;AAC/B,IAAA,MAAM,SAAA,GAAY,MAAA,CAAO,KAAA,IAAS,EAAE,EAAE,IAAA,EAAK;AAC3C,IAAA,OAAO,+BAAA,CAAgC,IAAA,CAAK,SAAS,CAAA,GAAI,SAAA,GAAY,EAAA;AAAA,EACvE,CAAA;AACA,EAAA,MAAM,WAAA,GAAc,CAAC,KAAA,EAAO,SAAA,GAAY,GAAA,KAAQ,UAAU,KAAK,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,SAAS,CAAA;AACnF,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KACrB,UAAA,CAAW,KAAA,EAAO,EAAE,CAAA,CACjB,GAAA,CAAI,CAAC,KAAA,KAAU;AACd,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,KAAA,EAAO,SAAS,IAAI,CAAA;AAC3C,MAAA,OAAO,OAAO,QAAA,KAAa,QAAA,IAAY,OAAO,QAAA,KAAa,OAAA,GAAU,OAAO,MAAA,GAAS,EAAA;AAAA,IACvF,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,EAAA;AAAA,IACT;AAAA,EACF,CAAC,CAAA,CACA,MAAA,CAAO,OAAO,CAAA;AACnB,EAAA,MAAM,gBAAA,GAAmB,CAAC,KAAA,EAAO,cAAA,GAAiB,EAAC,KAAM;AACvD,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,MAAA,CAAO,KAAA,IAAS,EAAE,CAAA,CAAE,IAAA,EAAK,EAAG,QAAA,CAAS,IAAI,CAAA;AAChE,MAAA,MAAM,eAAA,GACJ,MAAA,CAAO,QAAA,KAAa,OAAA,IACpB,CAAC,WAAA,EAAa,WAAA,EAAa,OAAO,CAAA,CAAE,QAAA,CAAS,MAAA,CAAO,QAAQ,CAAA;AAC9D,MAAA,IAAI,MAAA,CAAO,QAAA,KAAa,QAAA,IAAY,CAAC,iBAAiB,OAAO,EAAA;AAC7D,MAAA,IAAI,MAAA,CAAO,MAAA,KAAW,QAAA,CAAS,MAAA,IAAU,CAAC,eAAe,QAAA,CAAS,MAAA,CAAO,MAAM,CAAA,EAAG,OAAO,EAAA;AACzF,MAAA,OAAO,MAAA,CAAO,IAAA;AAAA,IAChB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,EAAA;AAAA,IACT;AAAA,EACF,CAAA;AACA,EAAA,MAAM,WAAA,GAAc,CAAC,GAAA,EAAK,QAAA,EAAU,MAAA,KAAW;AAC7C,IAAA,MAAM,MAAA,GAAS,WAAA,CAAY,QAAA,EAAU,EAAE,CAAA;AACvC,IAAA,IAAI,QAAQ,OAAO,MAAA;AACnB,IAAA,IAAI;AACF,MAAA,MAAM,WAAW,IAAI,GAAA,CAAI,GAAG,CAAA,CAAE,SAAS,WAAA,EAAY;AACnD,MAAA,IAAI,QAAA,KAAa,kBAAA,IAAsB,QAAA,KAAa,OAAA,SAAgB,MAAA,CAAO,QAAA;AAAA,IAC7E,CAAA,CAAA,MAAQ;AAAA,IAER;AACA,IAAA,OAAO,MAAA,CAAO,QAAA;AAAA,EAChB,CAAA;AACA,EAAA,MAAM,kBAAA,GAAqB,CAAC,KAAA,EAAO,cAAA,EAAgB,MAAA,KAAW;AAC5D,IAAA,IAAI,OAAA,GAAU,MAAA,CAAO,KAAA,IAAS,EAAE,CAAA;AAChC,IAAA,MAAM,UAAU,EAAC;AACjB,IAAA,KAAA,MAAW,KAAA,IAAS,OAAA,CAAQ,QAAA,CAAS,yBAAyB,CAAA,EAAG;AAC/D,MAAA,MAAM,GAAA,GAAM,MAAM,CAAC,CAAA;AACnB,MAAA,MAAM,SAAA,GAAY,GAAA,CAAI,OAAA,CAAQ,YAAA,EAAc,EAAE,CAAA;AAC9C,MAAA,MAAM,GAAA,GAAM,gBAAA,CAAiB,SAAA,EAAW,cAAc,CAAA;AACtD,MAAA,IAAI,CAAC,OAAO,OAAA,CAAQ,IAAA,CAAK,CAAC,MAAA,KAAW,MAAA,CAAO,GAAA,KAAQ,GAAG,CAAA,EAAG;AAC1D,MAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,GAAA,EAAK,KAAA,EAAO,YAAY,GAAA,EAAK,EAAA,EAAI,MAAM,CAAA,EAAG,CAAA;AACzD,MAAA,OAAA,GAAU,OAAA,CAAQ,OAAA,CAAQ,GAAA,EAAK,GAAG,CAAA;AAClC,MAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AAAA,IAC5B;AACA,IAAA,OAAO,EAAE,IAAA,EAAM,SAAA,CAAU,OAAO,GAAG,OAAA,EAAQ;AAAA,EAC7C,CAAA;AACA,EAAA,MAAM,UAAA,GAAa,CAAC,MAAA,EAAQ,QAAA,GAAW,EAAA,KACrC;AAAA,IACE,GAAG,IAAI,GAAA;AAAA,MAAA,CACJ,MAAM,OAAA,CAAQ,MAAM,CAAA,GAAI,MAAA,GAAS,EAAC,EAChC,GAAA,CAAI,CAAC,KAAA,KAAU,YAAY,KAAA,EAAO,GAAG,CAAC,CAAA,CACtC,OAAO,OAAO;AAAA;AACnB,GACF,CAAE,KAAA,CAAM,CAAA,EAAG,QAAQ,CAAA;AACrB,EAAA,MAAM,YAAA,GAAe,IAAI,MAAA,KAAW;AAClC,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,MAAM,MAAA,GAAS,OAAO,KAAK,CAAA;AAC3B,MAAA,IAAI,OAAO,QAAA,CAAS,MAAM,CAAA,IAAK,MAAA,IAAU,GAAG,OAAO,MAAA;AAAA,IACrD;AACA,IAAA,OAAO,CAAA;AAAA,EACT,CAAA;AACA,EAAA,MAAM,YAAA,GAAe,CAAA,GAAI,MAAA,KACvB,MAAA,CAAO,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,EAAE,CAAA;AAC9E,EAAA,MAAM,YAAA,GAAe,CAAC,KAAA,KAAU;AAC9B,IAAA,IAAI,OAAO,KAAA,KAAU,SAAA,EAAW,OAAO,KAAA;AACvC,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA,GAAQ,CAAA;AAC9C,IAAA,MAAM,UAAA,GAAa,SAAA,CAAU,KAAK,CAAA,CAAE,kBAAkB,OAAO,CAAA;AAC7D,IAAA,IACE;AAAA,MACE,OAAA;AAAA,MACA,GAAA;AAAA,MACA,IAAA;AAAA,MACA,YAAA;AAAA,MACA,OAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA,YAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACF,CAAE,SAAS,UAAU,CAAA;AAErB,MAAA,OAAO,KAAA;AACT,IAAA,IACE,CAAC,QAAQ,GAAA,EAAK,KAAA,EAAO,QAAQ,UAAA,EAAY,UAAA,EAAY,QAAA,EAAU,WAAW,CAAA,CAAE,QAAA;AAAA,MAC1E;AAAA,KACF;AAEA,MAAA,OAAO,IAAA;AACT,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AACA,EAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAAU;AAC7B,IAAA,MAAM,QAAQ,WAAA,CAAY,KAAA,EAAO,EAAE,CAAA,CAAE,kBAAkB,OAAO,CAAA;AAC9D,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,SAAA;AAAA,MACP,IAAA,EAAM,SAAA;AAAA,MACN,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO,SAAA;AAAA,MACP,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,SAAA;AAAA,MACP,QAAA,EAAU,SAAA;AAAA,MACV,sBAAA,EAAS,SAAA;AAAA,MACT,GAAA,EAAK,SAAA;AAAA,MACL,QAAA,EAAU,SAAA;AAAA,MACV,IAAA,EAAM,SAAA;AAAA,MACN,IAAA,EAAM,SAAA;AAAA,MACN,IAAA,EAAM,SAAA;AAAA,MACN,UAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,SAAA;AAAA,MACP,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO,SAAA;AAAA,MACP,GAAA,EAAK,SAAA;AAAA,MACL,IAAA,EAAM,SAAA;AAAA,MACN,IAAA,EAAM,SAAA;AAAA,MACN,UAAA,EAAY,SAAA;AAAA,MACZ,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,SAAA;AAAA,MACP,IAAA,EAAM,SAAA;AAAA,MACN,GAAA,EAAK,SAAA;AAAA,MACL,MAAA,EAAQ,SAAA;AAAA,MACR,OAAA,EAAS,SAAA;AAAA,MACT,MAAA,EAAQ,SAAA;AAAA,MACR,SAAA,EAAM,SAAA;AAAA,MACN,MAAA,EAAQ,SAAA;AAAA,MACR,UAAA,EAAO,SAAA;AAAA,MACP,IAAA,EAAM,SAAA;AAAA,MACN,oBAAA,EAAO,SAAA;AAAA,MACP,MAAA,EAAQ;AAAA,KACV;AACA,IAAA,OAAO,mBAAmB,IAAA,CAAK,KAAK,IAAI,KAAA,GAAQ,OAAA,CAAQ,KAAK,CAAA,IAAK,SAAA;AAAA,EACpE,CAAA;AACA,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAAU;AAC/B,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,QAAQ,KAAA,GAAQ,CAAC,KAAK,CAAA,GAAI,EAAC;AACjE,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,MAAM,SAAA,GACJ,OAAO,KAAA,KAAU,QAAA,GAAW,QAAS,KAAA,EAAO,GAAA,IAAO,KAAA,EAAO,GAAA,IAAO,KAAA,EAAO,SAAA;AAC1E,MAAA,MAAM,UAAA,GAAa,SAAS,SAAS,CAAA;AACrC,MAAA,IAAI,YAAY,OAAO,UAAA;AAAA,IACzB;AACA,IAAA,OAAO,EAAA;AAAA,EACT,CAAA;AACA,EAAA,MAAM,eAAA,GAAkB,CAAC,KAAA,KAAU;AACjC,IAAA,IAAI,CAAC,SAAS,OAAO,KAAA,KAAU,YAAY,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,IAAA;AACxE,IAAA,MAAM,aACJ,KAAA,CAAM,UAAA,IAAc,OAAO,KAAA,CAAM,UAAA,KAAe,YAAY,CAAC,KAAA,CAAM,QAAQ,KAAA,CAAM,UAAU,IACvF,EAAE,GAAG,OAAO,GAAG,KAAA,CAAM,YAAW,GAChC,KAAA;AACN,IAAA,MAAM,EAAA,GAAK,YAAY,UAAA,CAAW,EAAA,IAAM,WAAW,UAAA,IAAc,UAAA,CAAW,SAAS,GAAG,CAAA;AACxF,IAAA,MAAM,IAAA,GAAO,WAAA;AAAA,MACX,WAAW,IAAA,IAAQ,UAAA,CAAW,KAAA,IAAS,UAAA,CAAW,gBAAgB,UAAA,CAAW,QAAA;AAAA,MAC7E;AAAA,KACF;AACA,IAAA,IAAI,CAAC,EAAA,IAAM,CAAC,IAAA,EAAM,OAAO,IAAA;AACzB,IAAA,MAAM,aAAA,GAAgB,UAAA,CAAW,QAAA,IAAY,UAAA,CAAW,QAAA;AACxD,IAAA,MAAM,QAAA,GAAW,WAAA;AAAA,MACf,OAAO,aAAA,KAAkB,QAAA,GACpB,aAAA,EAAe,IAAA,IAAQ,eAAe,KAAA,GACvC,aAAA;AAAA,MACJ;AAAA,KACF;AACA,IAAA,MAAM,UAAA,GAAa,UAAA,CAAW,KAAA,IAAS,UAAA,CAAW,KAAA;AAClD,IAAA,MAAM,KAAA,GAAQ,YAAA;AAAA,MACZ,OAAO,UAAA,KAAe,QAAA,GAAW,UAAA,EAAY,GAAA,GAAM,UAAA;AAAA,MACnD,UAAA,EAAY,MAAA;AAAA,MACZ,UAAA,EAAY,KAAA;AAAA,MACZ,UAAA,CAAW;AAAA,KACb;AACA,IAAA,MAAM,QAAA,GAAA,CAAY,MAAM,OAAA,CAAQ,UAAA,CAAW,QAAQ,CAAA,GAAI,UAAA,CAAW,QAAA,GAAW,EAAC,EAAG,GAAA;AAAA,MAC/E,CAAC,OAAA,KAAY;AACX,QAAA,MAAM,UAAA,GAAa,YAAA;AAAA,UACjB,OAAA,EAAS,KAAA;AAAA,UACT,OAAA,EAAS,cAAA;AAAA,UACT,OAAA,EAAS,aAAA;AAAA,UACT,OAAA,EAAS,kBAAA;AAAA,UACT,OAAA,EAAS;AAAA,SACX;AACA,QAAA,MAAM,cAAA,GAAiB,YAAA;AAAA,UACrB,OAAA,EAAS,SAAA;AAAA,UACT,OAAA,EAAS,YAAA;AAAA,UACT,OAAA,EAAS,WAAA;AAAA,UACT,OAAA,EAAS,QAAA;AAAA,UACT,OAAA,EAAS;AAAA,SACX;AACA,QAAA,MAAM,oBAAoB,UAAA,KAAe,MAAA,GAAY,MAAA,GAAY,MAAA,CAAO,UAAU,CAAA,GAAI,CAAA;AACtF,QAAA,OAAO;AAAA,UACL,EAAA,EAAI,YAAY,OAAA,EAAS,EAAA,IAAM,SAAS,UAAA,IAAc,OAAA,EAAS,WAAW,GAAG,CAAA;AAAA,UAC7E,IAAA,EAAM,WAAA,CAAY,OAAA,EAAS,IAAA,EAAM,GAAG,CAAA;AAAA,UACpC,KAAA,EAAO,WAAA,CAAY,OAAA,EAAS,KAAA,EAAO,GAAG,CAAA;AAAA,UACtC,SAAA,EAAW,YAAA,CAAa,cAAc,CAAA,IAAK,iBAAA,IAAqB,IAAA;AAAA,UAChE,UAAA,EAAY,cAAA,KAAmB,MAAA,IAAa,UAAA,KAAe;AAAA,SAC7D;AAAA,MACF;AAAA,KACF;AACA,IAAA,MAAM,oBAAoB,QAAA,CAAS,MAAA,CAAO,CAAC,OAAA,KAAY,QAAQ,SAAS,CAAA;AACxE,IAAA,MAAM,cAAA,GAAiB,iBAAA,CAAkB,MAAA,GAAS,iBAAA,GAAoB,QAAA;AACtE,IAAA,MAAM,KAAA,GAAQ,UAAA;AAAA,MACZ,SAAS,MAAA,GACL,cAAA,CAAe,GAAA,CAAI,CAAC,YAAY,OAAA,CAAQ,IAAI,CAAA,GAC5C,KAAA,CAAM,QAAQ,UAAA,CAAW,KAAK,CAAA,GAC5B,UAAA,CAAW,QACX;AAAC,KACT;AACA,IAAA,MAAM,MAAA,GAAS,UAAA;AAAA,MACb,SAAS,MAAA,GACL,cAAA,CAAe,GAAA,CAAI,CAAC,YAAY,OAAA,CAAQ,KAAK,CAAA,GAC7C,KAAA,CAAM,QAAQ,UAAA,CAAW,MAAM,CAAA,GAC7B,UAAA,CAAW,SACX;AAAC,KACT;AACA,IAAA,MAAM,gBAAgB,WAAA,CAAY,UAAA,CAAW,aAAA,IAAiB,UAAA,CAAW,cAAc,GAAG,CAAA;AAC1F,IAAA,MAAM,iBAAiB,WAAA,CAAY,UAAA,CAAW,cAAA,IAAkB,UAAA,CAAW,eAAe,GAAG,CAAA;AAC7F,IAAA,MAAM,YAAA,GAAe,KAAA,CAAM,QAAA,CAAS,aAAa,IAAI,aAAA,GAAgB,EAAA;AACrE,IAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,QAAA,CAAS,cAAc,IAAI,cAAA,GAAiB,EAAA;AACzE,IAAA,MAAM,SAAA,GAAY,WAAA;AAAA,MAChB,WAAW,mBAAA,IACT,UAAA,CAAW,iBAAA,IACX,UAAA,CAAW,cACX,UAAA,CAAW,SAAA;AAAA,MACb;AAAA,KACF;AACA,IAAA,MAAM,eAAA,GAAkB,iBAAA,CAAkB,IAAA,CAAK,CAAC,OAAA,KAAY;AAC1D,MAAA,MAAM,cAAc,OAAA,CAAQ,EAAA;AAC5B,MAAA,IAAI,SAAA,IAAa,WAAA,KAAgB,SAAA,EAAW,OAAO,IAAA;AACnD,MAAA,MAAM,WAAA,GAAc,CAAC,YAAA,IAAgB,OAAA,CAAQ,IAAA,KAAS,YAAA;AACtD,MAAA,MAAM,YAAA,GAAe,CAAC,aAAA,IAAiB,OAAA,CAAQ,KAAA,KAAU,aAAA;AACzD,MAAA,OAAO,WAAA,IAAe,YAAA;AAAA,IACxB,CAAC,CAAA;AACD,IAAA,MAAM,mBAAA,GAAsB,YAAA;AAAA,MAC1B,YAAA;AAAA,QACE,UAAA,CAAW,SAAA;AAAA,QACX,UAAA,CAAW,YAAA;AAAA,QACX,UAAA,CAAW,WAAA;AAAA,QACX,UAAA,CAAW,QAAA;AAAA,QACX,UAAA,CAAW,OAAA;AAAA,QACX,UAAA,CAAW;AAAA;AACb,KACF;AACA,IAAA,MAAM,YAAA,GAAe,YAAA;AAAA,MACnB,UAAA,CAAW,KAAA;AAAA,MACX,UAAA,CAAW,cAAA;AAAA,MACX,UAAA,CAAW,aAAA;AAAA,MACX,UAAA,CAAW,kBAAA;AAAA,MACX,UAAA,CAAW;AAAA,KACb;AACA,IAAA,MAAM,OAAA,GACJ,mBAAA,KAAwB,KAAA,KACvB,YAAA,KAAiB,MAAA,IAAa,MAAA,CAAO,YAAY,CAAA,GAAI,CAAA,CAAA,KACrD,CAAC,QAAA,CAAS,MAAA,IAAU,kBAAkB,MAAA,GAAS,CAAA,CAAA;AAClD,IAAA,MAAM,aACJ,mBAAA,KAAwB,MAAA,IACxB,YAAA,KAAiB,MAAA,IACjB,iBAAiB,UAAA,KAAe,IAAA;AAClC,IAAA,MAAM,cAAA,GACJ,UAAA,CAAW,gBAAA,IACX,UAAA,CAAW,kBACX,UAAA,CAAW,UAAA,IACX,UAAA,CAAW,SAAA,IACX,WAAW,cAAA,IACX,UAAA,CAAW,aAAA,IACX,UAAA,CAAW,cACX,UAAA,CAAW,SAAA;AACb,IAAA,MAAM,gBAAA,GACJ,iBAAiB,KAAA,EAAO,UAAA,IACxB,iBAAiB,KAAA,EAAO,SAAA,IACxB,eAAA,EAAiB,UAAA,IACjB,eAAA,EAAiB,SAAA;AACnB,IAAA,MAAM,SAAA,GAAY,YAAA;AAAA,MAChB,OAAO,cAAA,KAAmB,QAAA,GAAW,cAAA,EAAgB,GAAA,GAAM,cAAA;AAAA,MAC3D,cAAA,EAAgB,MAAA;AAAA,MAChB,cAAA,EAAgB,KAAA;AAAA,MAChB;AAAA,KACF;AACA,IAAA,MAAM,MAAM,QAAA,CAAS,UAAA,CAAW,OAAO,UAAA,CAAW,WAAA,IAAe,WAAW,IAAI,CAAA;AAChF,IAAA,OAAO;AAAA,MACL,EAAA;AAAA,MACA,IAAA,EAAM,WAAA,CAAY,UAAA,CAAW,IAAA,EAAM,GAAG,CAAA,IAAK,EAAA;AAAA,MAC3C,GAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA;AAAA,MACA,aAAa,WAAA,CAAY,UAAA,CAAW,WAAA,IAAe,UAAA,CAAW,UAAU,GAAG,CAAA;AAAA,MAC3E,KAAA;AAAA,MACA,SAAA,EAAW,SAAA,GAAY,KAAA,GAAQ,SAAA,GAAY,CAAA;AAAA,MAC3C,QAAA,EAAU,aAAA;AAAA,QACR,WAAW,QAAA,IAAY,UAAA,CAAW,SAAA,IAAa,UAAA,CAAW,SAAS,UAAA,CAAW;AAAA,OAChF;AAAA,MACA,KAAA;AAAA,MACA,MAAA;AAAA,MACA,YAAA;AAAA,MACA,aAAA;AAAA,MACA,SAAA,EACE,eAAA,EAAiB,EAAA,KAChB,QAAA,CAAS,KAAK,CAAC,OAAA,KAAY,OAAA,CAAQ,EAAE,CAAA,GAAI,iBAAA,CAAkB,CAAC,CAAA,EAAG,MAAM,EAAA,GAAK,SAAA,CAAA;AAAA,MAC7E,yBAAA,EAA2B,QAAQ,SAAS,CAAA;AAAA,MAC5C,QAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAAA,EAEA,MAAM,iCAAiC,WAAA,CAAY;AAAA,IACjD,WAAW,kBAAA,GAAqB;AAC9B,MAAA,OAAO;AAAA,QACL,SAAA;AAAA,QACA,cAAA;AAAA,QACA,UAAA;AAAA,QACA,SAAA;AAAA,QACA,aAAA;AAAA,QACA,gBAAA;AAAA,QACA,mBAAA;AAAA,QACA,OAAA;AAAA,QACA,gBAAA;AAAA,QACA,gBAAA;AAAA,QACA,gBAAA;AAAA,QACA,mBAAA;AAAA,QACA,eAAA;AAAA,QACA,oBAAA;AAAA,QACA,wBAAA;AAAA,QACA,UAAA;AAAA,QACA,eAAA;AAAA,QACA,aAAA;AAAA,QACA,eAAA;AAAA,QACA,cAAA;AAAA,QACA,UAAA;AAAA,QACA,QAAA;AAAA,QACA,gBAAA;AAAA,QACA,WAAA;AAAA,QACA,aAAA;AAAA,QACA,iBAAA;AAAA,QACA,iBAAA;AAAA,QACA,kBAAA;AAAA,QACA,iBAAA;AAAA,QACA,sBAAA;AAAA,QACA,oBAAA;AAAA,QACA,wBAAA;AAAA,QACA,eAAA;AAAA,QACA,cAAA;AAAA,QACA,aAAA;AAAA,QACA,wBAAA;AAAA,QACA,uBAAA;AAAA,QACA,cAAA;AAAA,QACA,WAAA;AAAA,QACA,kBAAA;AAAA,QACA,oBAAA;AAAA,QACA,wBAAA;AAAA,QACA,uBAAA;AAAA,QACA,uBAAA;AAAA,QACA,eAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,IAEA,WAAA,GAAc;AACZ,MAAA,KAAA,EAAM;AACN,MAAA,IAAA,CAAK,OAAO,IAAA,CAAK,YAAA,CAAa,EAAE,IAAA,EAAM,QAAQ,CAAA;AAC9C,MAAA,IAAA,CAAK,UAAU,EAAC;AAChB,MAAA,IAAA,CAAK,WAAW,EAAC;AACjB,MAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AACf,MAAA,IAAA,CAAK,UAAU,EAAC;AAChB,MAAA,IAAA,CAAK,gBAAA,GAAmB,QAAQ,OAAA,EAAQ;AACxC,MAAA,IAAA,CAAK,MAAA,GAAS,KAAA;AACd,MAAA,IAAA,CAAK,IAAA,GAAO,KAAA;AACZ,MAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,MAAA,IAAA,CAAK,WAAA,uBAAkB,GAAA,EAAI;AAC3B,MAAA,IAAA,CAAK,UAAA,uBAAiB,GAAA,EAAI;AAC1B,MAAA,IAAA,CAAK,mBAAA,GAAsB,EAAA;AAC3B,MAAA,IAAA,CAAK,iBAAA,GAAoB,IAAA;AACzB,MAAA,IAAA,CAAK,iBAAA,GAAoB,CAAA;AACzB,MAAA,IAAA,CAAK,aAAA,GAAgB,CAAA;AACrB,MAAA,IAAA,CAAK,oBAAA,GAAuB,KAAA;AAK5B,MAAA,IAAA,CAAK,aAAA,GAAgB,KAAA;AACrB,MAAA,IAAA,CAAK,WAAA,GAAc,CAAC,KAAA,KAAU,IAAA,CAAK,gBAAgB,KAAK,CAAA;AACxD,MAAA,IAAA,CAAK,eAAA,GAAkB,CAAC,KAAA,KAAU,IAAA,CAAK,cAAc,KAAK,CAAA;AAC1D,MAAA,IAAA,CAAK,YAAA,GAAe,CAAC,KAAA,KAAU,IAAA,CAAK,WAAW,KAAK,CAAA;AACpD,MAAA,IAAA,CAAK,iBAAiB,MAAM;AAC1B,QAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,UAAU,CAAA;AAClD,QAAA,IAAI,OAAA,EAAS,OAAA,CAAQ,MAAA,GAAS,SAAA,CAAU,MAAA;AAAA,MAC1C,CAAA;AAAA,IACF;AAAA,IAEA,iBAAA,GAAoB;AAClB,MAAA,IAAA,CAAK,aAAA,EAAc;AACnB,MAAA,IAAA,CAAK,WAAA,EAAY;AACjB,MAAA,IAAA,CAAK,IAAA,EAAK;AACV,MAAA,IAAA,CAAK,OAAA,EAAQ;AACb,MAAA,IAAA,CAAK,gBAAA,GAAmB,KAAK,cAAA,EAAe;AAC5C,MAAA,CAAC,IAAA,CAAK,OAAO,aAAA,KAAkB,UAAA,GAAa,QAAQ,OAAA,EAAQ,GAAI,IAAA,CAAK,WAAA,EAAY,EAAG,OAAA;AAAA,QAClF,MAAM;AACJ,UAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AAAA,QACf;AAAA,OACF;AACA,MAAA,MAAA,CAAO,gBAAA,CAAiB,SAAA,EAAW,IAAA,CAAK,WAAW,CAAA;AACnD,MAAA,MAAA,CAAO,gBAAA,CAAiB,4BAAA,EAA8B,IAAA,CAAK,eAAe,CAAA;AAC1E,MAAA,MAAA,CAAO,gBAAA,CAAiB,yBAAA,EAA2B,IAAA,CAAK,YAAY,CAAA;AACpE,MAAA,MAAA,CAAO,gBAAA,CAAiB,QAAA,EAAU,IAAA,CAAK,cAAc,CAAA;AACrD,MAAA,MAAA,CAAO,gBAAA,CAAiB,SAAA,EAAW,IAAA,CAAK,cAAc,CAAA;AAGtD,MAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AAAA,IACvB;AAAA,IAEA,oBAAA,GAAuB;AACrB,MAAA,IAAA,CAAK,oBAAoB,KAAK,CAAA;AAC9B,MAAA,MAAA,CAAO,mBAAA,CAAoB,SAAA,EAAW,IAAA,CAAK,WAAW,CAAA;AACtD,MAAA,MAAA,CAAO,mBAAA,CAAoB,4BAAA,EAA8B,IAAA,CAAK,eAAe,CAAA;AAC7E,MAAA,MAAA,CAAO,mBAAA,CAAoB,yBAAA,EAA2B,IAAA,CAAK,YAAY,CAAA;AACvE,MAAA,MAAA,CAAO,mBAAA,CAAoB,QAAA,EAAU,IAAA,CAAK,cAAc,CAAA;AACxD,MAAA,MAAA,CAAO,mBAAA,CAAoB,SAAA,EAAW,IAAA,CAAK,cAAc,CAAA;AACzD,MAAA,IAAA,CAAK,WAAW,OAAA,CAAQ,CAAC,UAAU,MAAA,CAAO,YAAA,CAAa,KAAK,CAAC,CAAA;AAC7D,MAAA,IAAA,CAAK,WAAW,KAAA,EAAM;AACtB,MAAA,MAAA,CAAO,aAAA,CAAc,KAAK,aAAa,CAAA;AACvC,MAAA,IAAI,OAAO,IAAA,CAAK,OAAA,EAAS,eAAe,UAAA,EAAY,IAAA,CAAK,QAAQ,UAAA,EAAW;AAAA,IAC9E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,OAAO,kBAAA,mBAAqB,IAAI,GAAA,CAAI;AAAA,MAClC,SAAA;AAAA,MACA,cAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA,iBAAA;AAAA,MACA,iBAAA;AAAA,MACA,kBAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,IAED,wBAAA,CAAyB,IAAA,EAAM,QAAA,EAAU,QAAA,EAAU;AACjD,MAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AAMvB,MAAA,IAAI,aAAa,QAAA,EAAU;AAC3B,MAAA,IAAI,yBAAyB,kBAAA,CAAmB,GAAA,CAAI,IAAI,CAAA,OAAQ,mBAAA,EAAoB;AACpF,MAAA,IAAA,CAAK,WAAA,EAAY;AAAA,IACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgBA,mBAAA,GAAsB;AAoBpB,MAAA,IAAI,CAAC,KAAK,aAAA,EAAe;AAGzB,MAAA,IAAI,CAAC,IAAA,CAAK,OAAA,IAAW,CAAC,KAAK,UAAA,EAAY;AACvC,MAAA,IAAI,KAAK,oBAAA,EAAsB;AAC/B,MAAA,IAAA,CAAK,oBAAA,GAAuB,IAAA;AAC5B,MAAA,cAAA,CAAe,MAAM;AACnB,QAAA,IAAA,CAAK,oBAAA,GAAuB,KAAA;AAC5B,QAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACvB,QAAA,IAAI,OAAO,IAAA,CAAK,OAAA,EAAS,eAAe,UAAA,EAAY,IAAA,CAAK,QAAQ,UAAA,EAAW;AAC5E,QAAA,IAAA,CAAK,aAAA,EAAc;AACnB,QAAA,IAAA,CAAK,gBAAA,GAAmB,KAAK,cAAA,EAAe;AAAA,MAC9C,CAAC,CAAA;AAAA,IACH;AAAA,IAEA,IAAI,MAAA,GAAS;AACX,MAAA,MAAM,sBAAA,GAAyB,MAAA,CAAO,IAAA,CAAK,YAAA,CAAa,iBAAiB,CAAC,CAAA;AAC1E,MAAA,MAAM,oBAAA,GACJ,MAAA,CAAO,QAAA,CAAS,sBAAsB,KAAK,sBAAA,GAAyB,CAAA,GAChE,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,sBAAsB,CAAA,EAAG,2BAA2B,CAAA,GACxE,+BAAA;AACN,MAAA,MAAM,sBAAA,GAAyB,MAAA,CAAO,IAAA,CAAK,YAAA,CAAa,uBAAuB,CAAC,CAAA;AAChF,MAAA,MAAM,iBAAA,GACJ,MAAA,CAAO,QAAA,CAAS,sBAAsB,KAAK,sBAAA,GAAyB,CAAA,GAChE,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,sBAAsB,CAAA,EAAG,wBAAwB,CAAA,GACrE,4BAAA;AACN,MAAA,MAAM,QAAQ,IAAA,CAAK,YAAA,CAAa,OAAO,CAAA,EAAG,MAAK,IAAK,aAAA;AACpD,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,SAAA,CAAU,IAAA,CAAK,YAAA,CAAa,SAAS,CAAC,CAAA;AAAA,QAC9C,aAAa,IAAA,CAAK,YAAA,CAAa,cAAc,CAAA,EAAG,MAAK,IAAK,EAAA;AAAA,QAC1D,SAAS,IAAA,CAAK,YAAA,CAAa,UAAU,CAAA,EAAG,MAAK,IAAK,EAAA;AAAA,QAClD,QAAQ,IAAA,CAAK,YAAA,CAAa,SAAS,CAAA,EAAG,MAAK,IAAK,EAAA;AAAA,QAChD,YAAY,IAAA,CAAK,YAAA,CAAa,aAAa,CAAA,EAAG,MAAK,IAAK,cAAA;AAAA,QACxD,eAAe,IAAA,CAAK,YAAA,CAAa,gBAAgB,CAAA,KAAM,aAAa,UAAA,GAAa,SAAA;AAAA,QACjF,iBACE,IAAA,CAAK,YAAA,CAAa,mBAAmB,CAAA,KAAM,YAAY,SAAA,GAAY,UAAA;AAAA,QACrE,KAAA;AAAA,QACA,aAAA,EAAe,KAAK,YAAA,CAAa,gBAAgB,GAAG,IAAA,EAAK,IAAK,GAAG,KAAK,CAAA,8BAAA,CAAA;AAAA,QACtE,aAAA,EACE,SAAA,CAAU,IAAA,CAAK,YAAA,CAAa,gBAAgB,CAAA,IAAK,KAAK,CAAA,CACnD,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CACV,iBAAA,CAAkB,OAAO,CAAA,IAAK,IAAA;AAAA,QACnC,eAAe,IAAA,CAAK,YAAA,CAAa,gBAAgB,CAAA,EAAG,MAAK,IAAK,+BAAA;AAAA,QAC9D,kBAAkB,IAAA,CAAK,YAAA,CAAa,mBAAmB,CAAA,EAAG,MAAK,IAAK,0BAAA;AAAA,QACpE,cAAc,IAAA,CAAK,YAAA,CAAa,eAAe,CAAA,KAAM,YAAY,SAAA,GAAY,OAAA;AAAA,QAC7E,gBAAA,EAAkB,IAAA,CAAK,YAAA,CAAa,oBAAoB,CAAA,KAAM,OAAA;AAAA,QAC9D,oBAAA,EAAsB,IAAA,CAAK,YAAA,CAAa,wBAAwB,CAAA,KAAM,OAAA;AAAA,QACtE,UACE,IAAA,CAAK,YAAA,CAAa,UAAU,CAAA,EAAG,MAAK,IAAK,yDAAA;AAAA,QAC3C,cAAc,IAAA,CAAK,YAAA,CAAa,eAAe,CAAA,KAAM,YAAY,SAAA,GAAY,SAAA;AAAA,QAC7E,aAAa,IAAA,CAAK,YAAA,CAAa,aAAa,CAAA,EAAG,MAAK,IAAK,2CAAA;AAAA,QACzD,YAAA,EAAc,UAAA,CAAW,IAAA,CAAK,YAAA,CAAa,eAAe,CAAA,EAAG;AAAA,UAC3D,iDAAA;AAAA,UACA,0BAAA;AAAA,UACA;AAAA,SACD,CAAA;AAAA,QACD,QAAQ,IAAA,CAAK,YAAA,CAAa,cAAc,CAAA,EAAG,MAAK,IAAK,SAAA;AAAA,QACrD,QAAA,EAAU,KAAK,YAAA,CAAa,UAAU,GAAG,IAAA,EAAK,CAAE,mBAAkB,IAAK,KAAA;AAAA,QACvE,QAAQ,IAAA,CAAK,YAAA,CAAa,QAAQ,CAAA,EAAG,MAAK,IAAK,OAAA;AAAA,QAC/C,aAAA,EAAe,aAAA,CAAc,IAAA,CAAK,YAAA,CAAa,gBAAgB,CAAC,CAAA;AAAA,QAChE,QAAA,EAAU,IAAA,CAAK,YAAA,CAAa,WAAW,CAAA,IAAK,EAAA;AAAA,QAC5C,YAAY,IAAA,CAAK,YAAA,CAAa,aAAa,CAAA,EAAG,MAAK,IAAK,EAAA;AAAA,QACxD,cAAA,EAAgB,IAAA,CAAK,YAAA,CAAa,iBAAiB,CAAA,KAAM,OAAA;AAAA,QACzD,iBAAiB,oBAAA,GAAuB,GAAA;AAAA,QACxC,eAAA,EAAiB,IAAA,CAAK,YAAA,CAAa,kBAAkB,CAAA,KAAM,MAAA;AAAA,QAC3D,sBAAsB,IAAA,CAAK,GAAA;AAAA,UACzB,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,YAAA,CAAa,iBAAiB,CAAC,CAAA,IAAK,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,EAAA,EAAI,CAAC,CAAA;AAAA,UAC7E,EAAA,GAAK,KAAK,EAAA,GAAK;AAAA,SACjB;AAAA,QACA,kBAAA,EAAoB,IAAA,CAAK,YAAA,CAAa,sBAAsB,CAAA,KAAM,MAAA;AAAA,QAClE,gBAAA,EAAkB,IAAA,CAAK,YAAA,CAAa,oBAAoB,CAAA,KAAM,OAAA;AAAA,QAC9D,oBAAA,EAAsB,IAAA,CAAK,YAAA,CAAa,wBAAwB,CAAA,KAAM,MAAA;AAAA,QACtE,YAAA,EAAc,IAAA,CAAK,YAAA,CAAa,eAAe,CAAA,KAAM,OAAA;AAAA,QACrD,aAAa,IAAA,CAAK,YAAA,CAAa,cAAc,CAAA,KAAM,aAAa,UAAA,GAAa,QAAA;AAAA,QAC7E,UAAA,EAAY,SAAA,CAAU,IAAA,CAAK,YAAA,CAAa,aAAa,CAAC,CAAA;AAAA,QACtD,oBAAA,EAAsB,aAAA,CAAc,IAAA,CAAK,YAAA,CAAa,wBAAwB,CAAC,CAAA;AAAA,QAC/E,kBAAA,EAAoB,IAAA,CAAK,YAAA,CAAa,uBAAuB,CAAA,KAAM,OAAA;AAAA,QACnE,aAAa,WAAA,CAAY,IAAA,CAAK,YAAA,CAAa,cAAc,GAAG,GAAG,CAAA;AAAA,QAC/D,QAAA,EAAU,QAAA,CAAS,IAAA,CAAK,YAAA,CAAa,WAAW,CAAC,CAAA;AAAA,QACjD,gBAAgB,WAAA,CAAY,IAAA,CAAK,YAAA,CAAa,kBAAkB,GAAG,GAAG,CAAA;AAAA,QACtE,kBAAkB,WAAA,CAAY,IAAA,CAAK,YAAA,CAAa,oBAAoB,GAAG,EAAE,CAAA;AAAA,QACzE,oBAAA,EAAsB,IAAA,CAAK,YAAA,CAAa,wBAAwB,CAAA,KAAM,OAAA;AAAA,QACtE,qBAAqB,WAAA,CAAY,IAAA,CAAK,aAAa,uBAAuB,CAAA,EAAG,EAAE,CAAA,IAAK,GAAA;AAAA,QACpF,yBAAA,EAA2B,iBAAA,GAAoB,EAAA,GAAK,EAAA,GAAK,EAAA;AAAA,QACzD,cAAc,WAAA,CAAY,IAAA,CAAK,YAAA,CAAa,eAAe,GAAG,GAAG;AAAA,OACnE;AAAA,IACF;AAAA,IAEA,IAAI,MAAA,GAAS;AACX,MAAA,MAAM,OAAA,GAAU;AAAA,QACd,IAAA,EAAM,WAAA;AAAA,QACN,KAAA,EAAO,eAAA;AAAA,QACP,OAAA,EAAS,kBAAA;AAAA,QACT,MAAA,EAAQ,QAAA;AAAA,QACR,YAAA,EAAc,yBAAA;AAAA,QACd,OAAA,EAAS,cAAA;AAAA,QACT,IAAA,EAAM,cAAA;AAAA,QACN,QAAA,EAAU,sBAAA;AAAA,QACV,SAAA,EAAW,wBAAA;AAAA,QACX,IAAA,EAAM,WAAA;AAAA,QACN,IAAA,EAAM,MAAA;AAAA,QACN,GAAA,EAAK,aAAA;AAAA,QACL,MAAA,EAAQ,cAAA;AAAA,QACR,KAAA,EAAO,cAAA;AAAA,QACP,UAAA,EAAY,WAAA;AAAA,QACZ,IAAA,EAAM,MAAA;AAAA,QACN,KAAA,EAAO,OAAA;AAAA,QACP,QAAA,EAAU,UAAA;AAAA,QACV,QAAA,EAAU,UAAA;AAAA,QACV,KAAA,EAAO,OAAA;AAAA,QACP,QAAA,EAAU,mBAAA;AAAA,QACV,OAAA,EAAS,SAAA;AAAA,QACT,UAAA,EAAY,aAAA;AAAA,QACZ,OAAA,EAAS,yCAAA;AAAA,QACT,KAAA,EAAO,WAAA;AAAA,QACP,WAAA,EAAa,yCAAA;AAAA,QACb,YAAA,EAAc,gDAAA;AAAA,QACd,QAAA,EAAU,WAAA;AAAA,QACV,QAAA,EAAU,qBAAA;AAAA,QACV,MAAA,EAAQ,QAAA;AAAA,QACR,aAAA,EAAe,gBAAA;AAAA,QACf,QAAA,EAAU,UAAA;AAAA,QACV,gBAAA,EAAkB,mBAAA;AAAA,QAClB,YAAA,EAAc,eAAA;AAAA,QACd,aAAA,EAAe,wBAAA;AAAA,QACf,YAAA,EAAc,uBAAA;AAAA,QACd,UAAA,EAAY;AAAA,OACd;AACA,MAAA,MAAM,OAAA,GAAU;AAAA,QACd,IAAA,EAAM,eAAA;AAAA,QACN,KAAA,EAAO,yBAAA;AAAA,QACP,OAAA,EAAS,yBAAA;AAAA,QACT,MAAA,EAAQ,iBAAA;AAAA,QACR,YAAA,EAAc,wBAAA;AAAA,QACd,OAAA,EAAS,qBAAA;AAAA,QACT,IAAA,EAAM,uBAAA;AAAA,QACN,QAAA,EAAU,sBAAA;AAAA,QACV,SAAA,EAAW,2CAAA;AAAA,QACX,IAAA,EAAM,WAAA;AAAA,QACN,IAAA,EAAM,aAAA;AAAA,QACN,GAAA,EAAK,aAAA;AAAA,QACL,MAAA,EAAQ,iBAAA;AAAA,QACR,KAAA,EAAO,uBAAA;AAAA,QACP,UAAA,EAAY,aAAA;AAAA,QACZ,IAAA,EAAM,OAAA;AAAA,QACN,KAAA,EAAO,MAAA;AAAA,QACP,QAAA,EAAU,MAAA;AAAA,QACV,QAAA,EAAU,cAAA;AAAA,QACV,KAAA,EAAO,cAAA;AAAA,QACP,QAAA,EAAU,yCAAA;AAAA,QACV,OAAA,EAAS,yBAAA;AAAA,QACT,UAAA,EAAY,gCAAA;AAAA,QACZ,OAAA,EAAS,6FAAA;AAAA,QACT,KAAA,EAAO,kBAAA;AAAA,QACP,WAAA,EAAa,8CAAA;AAAA,QACb,YAAA,EAAc,+EAAA;AAAA,QACd,QAAA,EAAU,iCAAA;AAAA,QACV,QAAA,EAAU,kBAAA;AAAA,QACV,MAAA,EAAQ,UAAA;AAAA,QACR,aAAA,EAAe,0BAAA;AAAA,QACf,QAAA,EAAU,eAAA;AAAA,QACV,gBAAA,EAAkB,yBAAA;AAAA,QAClB,YAAA,EAAc,uBAAA;AAAA,QACd,aAAA,EAAe,qCAAA;AAAA,QACf,YAAA,EAAc,mCAAA;AAAA,QACd,UAAA,EAAY;AAAA,OACd;AACA,MAAA,IAAI,SAAS,EAAC;AACd,MAAA,IAAI;AACF,QAAA,MAAA,GAAS,KAAK,KAAA,CAAM,IAAA,CAAK,YAAA,CAAa,cAAc,KAAK,IAAI,CAAA;AAAA,MAC/D,CAAA,CAAA,MAAQ;AAAA,MAER;AACA,MAAA,OAAO;AAAA,QACL,GAAI,KAAK,MAAA,CAAO,MAAA,CAAO,aAAY,CAAE,UAAA,CAAW,IAAI,CAAA,GAAI,OAAA,GAAU,OAAA;AAAA,QAClE,GAAG;AAAA,OACL;AAAA,IACF;AAAA,IAEA,aAAA,GAAgB;AACd,MAAA,IAAI,CAAC,KAAK,UAAA,EAAY;AACtB,MAAA,IAAA,CAAK,oBAAA,EAAqB;AAC1B,MAAA,IAAA,CAAK,UAAUA,0CAAA,CAAyB;AAAA,QACtC,MAAA,EAAQ,KAAK,MAAA,CAAO,MAAA;AAAA,QACpB,OAAA,EAAS,KAAK,MAAA,CAAO,OAAA;AAAA,QACrB,OAAA,EAAS,KAAK,MAAA,CAAO,MAAA;AAAA,QACrB,WAAA,EAAa,KAAK,MAAA,CAAO,WAAA;AAAA,QACzB,KAAA,EAAO,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,UAAA,CAAA;AAAA,QAC3B,QAAA,EAAU,EAAE,OAAA,EAAS,kBAAA,EAAmB;AAAA,QACxC,cAAA,EAAgB,KAAK,MAAA,CAAO,cAAA;AAAA,QAC5B,eAAe,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,kBAAkB,GAAI,CAAA;AAAA,QAC5D,eAAA,EAAiB,KAAK,MAAA,CAAO,eAAA;AAAA,QAC7B,aAAA,EAAe,KAAK,MAAA,CAAO,oBAAA;AAAA,QAC3B,UAAA,EAAY,CAAA,EAAG,IAAA,CAAK,UAAU,CAAA,QAAA,CAAA;AAAA,QAC9B,SAAS,CAAC,KAAA,KAAU,IAAA,CAAK,IAAA,CAAK,uBAAuB,KAAK;AAAA,OAC3D,CAAA;AAAA,IACH;AAAA,IAEA,IAAI,UAAA,GAAa;AACf,MAAA,MAAM,EAAE,MAAA,EAAQ,OAAA,EAAS,MAAA,KAAW,IAAA,CAAK,MAAA;AACzC,MAAA,OAAO,OAAA,CAAQ,UAAU,OAAA,IAAW,MAAA,IAAU,CAAC,MAAA,CAAO,UAAA,CAAW,OAAO,CAAC,CAAA;AAAA,IAC3E;AAAA,IAEA,IAAI,UAAA,GAAa;AACf,MAAA,MAAM,EAAE,WAAA,EAAa,OAAA,EAAQ,GAAI,IAAA,CAAK,MAAA;AACtC,MAAA,OAAO,CAAA,wBAAA,EAA2B,WAAA,IAAe,MAAM,CAAA,CAAA,EAAI,WAAW,OAAO,CAAA,CAAA;AAAA,IAC/E;AAAA,IAEA,IAAI,iBAAA,GAAoB;AACtB,MAAA,OAAO,GAAG,IAAA,CAAK,UAAU,CAAA,eAAA,EAAkB,IAAA,CAAK,OAAO,mBAAmB,CAAA,CAAA;AAAA,IAC5E;AAAA,IAEA,IAAI,iBAAA,GAAoB;AACtB,MAAA,OAAO,CAAA,EAAG,IAAA,CAAK,UAAU,CAAA,cAAA,CAAA,CAAiB,OAAA,CAAQ,mBAAmB,GAAG,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA;AAAA,IACxF;AAAA,IAEA,IAAI,eAAA,GAAkB;AACpB,MAAA,OAAO,OAAA;AAAA,QACL,KAAK,MAAA,CAAO,oBAAA,IAAwB,KAAK,MAAA,CAAO,WAAA,IAAe,KAAK,MAAA,CAAO;AAAA,OAC7E;AAAA,IACF;AAAA,IAEA,eAAA,GAAkB;AAChB,MAAA,IAAI,CAAC,IAAA,CAAK,eAAA,EAAiB,OAAO,IAAA;AAClC,MAAA,IAAI;AACF,QAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,CAAM,YAAA,CAAa,QAAQ,IAAA,CAAK,iBAAiB,KAAK,MAAM,CAAA;AAC/E,QAAA,IAAI,KAAA,EAAO,YAAY,IAAA,CAAK,MAAA,CAAO,uBAAuB,MAAA,CAAO,KAAA,EAAO,UAAU,CAAA,GAAI,CAAA;AACpF,UAAA,OAAO,IAAA;AAAA,MACX,CAAA,CAAA,MAAQ;AAAA,MAER;AACA,MAAA,IAAI;AACF,QAAA,MAAM,QAAA,GAAW,kBAAA,CAAmB,IAAA,CAAK,MAAA,CAAO,mBAAmB,CAAA;AACnE,QAAA,OAAO,SAAS,MAAA,CACb,KAAA,CAAM,GAAG,CAAA,CACT,KAAK,CAAC,KAAA,KAAU,KAAA,CAAM,IAAA,OAAW,CAAA,EAAG,IAAA,CAAK,iBAAiB,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE,CAAA;AAAA,MAC7E,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AAAA,IAEA,kBAAA,GAAqB;AACnB,MAAA,MAAM,UAAA,GAAa,KAAK,GAAA,EAAI;AAC5B,MAAA,IAAI;AACF,QAAA,YAAA,CAAa,OAAA;AAAA,UACX,IAAA,CAAK,iBAAA;AAAA,UACL,KAAK,SAAA,CAAU;AAAA,YACb,UAAA;AAAA,YACA,OAAA,EAAS,KAAK,MAAA,CAAO;AAAA,WACtB;AAAA,SACH;AAAA,MACF,CAAA,CAAA,MAAQ;AAAA,MAER;AACA,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,QAAA,CAAS,QAAA,KAAa,QAAA,GAAW,UAAA,GAAa,EAAA;AAC7D,QAAA,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG,IAAA,CAAK,iBAAiB,IAAI,kBAAA,CAAmB,IAAA,CAAK,MAAA,CAAO,mBAAmB,CAAC,CAAA,kBAAA,EAAqB,IAAA,CAAK,MAAA,CAAO,yBAAyB,iBAAiB,MAAM,CAAA,CAAA;AAAA,MACrL,CAAA,CAAA,MAAQ;AAAA,MAER;AACA,MAAA,IAAA,CAAK,WAAA,EAAY;AACjB,MAAA,qBAAA,CAAsB,MAAM,IAAA,CAAK,IAAA,CAAK,cAAc,UAAU,CAAA,EAAG,OAAO,CAAA;AACxE,MAAA,IAAA,CAAK,KAAK,2BAAA,EAA6B;AAAA,QACrC,UAAA;AAAA,QACA,OAAA,EAAS,KAAK,MAAA,CAAO;AAAA,OACtB,CAAA;AAAA,IACH;AAAA,IAEA,WAAA,GAAc;AACZ,MAAA,MAAM;AAAA,QACJ,aAAA;AAAA,QACA,aAAA;AAAA,QACA,aAAA;AAAA,QACA,gBAAA;AAAA,QACA,YAAA;AAAA,QACA,gBAAA;AAAA,QACA,oBAAA;AAAA,QACA,QAAA;AAAA,QACA,YAAA;AAAA,QACA,WAAA;AAAA,QACA,YAAA;AAAA,QACA,MAAA;AAAA,QACA,aAAA,EAAe,gBAAA;AAAA,QACf,UAAA;AAAA,QACA,WAAA;AAAA,QACA,QAAA;AAAA,QACA,cAAA;AAAA,QACA,gBAAA;AAAA,QACA;AAAA,UACE,IAAA,CAAK,MAAA;AACT,MAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,MAAA,MAAM,SAAA,GAAY,KAAK,eAAA,EAAgB;AACvC,MAAA,MAAM,SAAA,GAAY,QAAA,GACd,CAAA,SAAA,EAAY,IAAA,CAAK,QAAQ,CAAC,CAAA,4CAAA,EAA+C,IAAA,CAAK,cAAA,IAAkB,MAAA,CAAO,aAAa,CAAC,CAAA,IAAA,CAAA,GACrH,EAAA;AACJ,MAAA,MAAM,SAAA,GACJ,eAAe,SAAA,GACX,IAAA,CAAK,WAAW,CAAA,CAAE,QAAA,CAAS,UAAU,CAAA,GACnC,IAAA,CAAK,WAAW,EAAE,OAAA,CAAQ,UAAA,EAAY,SAAS,CAAA,GAC/C,CAAA,EAAG,KAAK,WAAW,CAAC,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,GACnC,EAAA;AACN,MAAA,MAAM,aAAA,GAAgB;AAAA,QACpB,SAAA,IAAa,SAAA,IAAa,CAAC,IAAA,CAAK,kBAAkB,SAAA,GAAY,EAAA;AAAA,QAC9D,YAAA,GAAe,IAAA,CAAK,YAAY,CAAA,GAAI;AAAA,OACtC,CAAE,OAAO,OAAO,CAAA;AAChB,MAAA,MAAM,UAAA,GAAa,cAAc,MAAA,GAC7B,CAAA,2DAAA,EAA8D,cAAc,IAAA,CAAK,wCAAqC,CAAC,CAAA,IAAA,CAAA,GACvH,EAAA;AACJ,MAAA,IAAA,CAAK,IAAA,CAAK,SAAA,GAAY,CAAA,MAAA,EAAS,UAAA,GAAa,CAAA,QAAA,EAAW,IAAA,CAAK,UAAU,CAAC,CAAA,CAAA,CAAA,GAAM,EAAE,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,CAAO,MAAM,CAAC,CAAA,EAAG,IAAA,CAAK,aAAA,EAAe,CAAA,QAAA,EAAW,gBAAA,GAAmB,CAAA,6BAAA,EAAgC,IAAA,CAAK,gBAAgB,CAAC,CAAA,EAAA,CAAA,GAAO,EAAE;AAAA,2EAAA,EACnJ,IAAA,CAAK,MAAA,CAAO,IAAI,CAAC,CAAA,iBAAA,EAAoB,IAAA,CAAK,MAAM,CAAA,gCAAA,EAAmC,IAAA,CAAK,MAAA,GAAS,QAAA,GAAW,EAAE,CAAA;AAAA,UAAA,EAC/K,gBAAA,GAAmB,+BAA+B,IAAA,CAAK,aAAa,CAAC,CAAA,OAAA,CAAA,GAAY,EAAE,CAAA,cAAA,EAAiB,IAAA,CAAK,aAAa,CAAC,YAAY,oBAAA,GAAuB,CAAA,OAAA,EAAU,IAAA,CAAK,gBAAgB,CAAC,CAAA,QAAA,CAAA,GAAa,EAAE,CAAA,6BAAA,EAAgC,YAAA,KAAiB,SAAA,GAAY,SAAA,GAAY,QAAG,CAAA;AAAA;AAAA,iDAAA,EAE9O,IAAA,CAAK,MAAA,GAAS,SAAA,GAAY,EAAE,CAAA,4DAAA,EAA+D,IAAA,CAAK,aAAa,CAAC,CAAA,eAAA,EAAkB,CAAC,IAAA,CAAK,MAAM,CAAA;AAAA,0DAAA,EACnI,IAAA,CAAK,aAAa,CAAC,CAAA,kBAAA,EAAqB,IAAA,CAAK,aAAa,CAAC,CAAA,wBAAA,EAA2B,IAAA,CAAK,MAAA,CAAO,MAAM,CAAC,CAAA,gGAAA,EAAmG,KAAK,MAAA,CAAO,OAAO,CAAC,CAAA,SAAA,EAAY,IAAA,CAAK,MAAA,CAAO,OAAO,CAAC,CAAA,iEAAA,EAA+D,IAAA,CAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA;AAAA,YAAA,EAE/X,YAAA,KAAiB,SAAA,GAAY,CAAA,iFAAA,EAAoF,IAAA,CAAK,aAAa,CAAC,CAAA,eAAA,EAAkB,IAAA,CAAK,QAAQ,CAAC,CAAA,gBAAA,CAAA,GAAqB,CAAA,gDAAA,EAAmD,KAAK,aAAa,CAAC,CAAA,WAAA,EAAc,IAAA,CAAK,MAAA,CAAO,YAAY,CAAC,CAAA,QAAA,EAAW,IAAA,CAAK,QAAQ,CAAC,CAAA,UAAA,CAAY;AAAA,uCAAA,EAChT,YAAA,CAAa,GAAA,CAAI,CAAC,MAAA,KAAW,CAAA,sBAAA,EAAyB,IAAA,CAAK,MAAM,CAAC,CAAA,SAAA,CAAW,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA;AAAA;AAAA,iCAAA,EAE7F,SAAA,CAAU,SAAS,QAAA,GAAW,EAAE,IAAI,IAAA,CAAK,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,mIAAA,EAC0C,IAAA,CAAK,aAAa,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAC,CAAA,KAAA,EAAQ,IAAA,CAAK,MAAA,CAAO,oBAAA,GAAuB,sBAAsB,EAAE,CAAA;AAAA;AAAA,yEAAA,EAEzK,IAAA,CAAK,MAAA,CAAO,YAAY,CAAC,CAAA;AAAA,oGAAA,EACE,IAAA,CAAK,MAAA,CAAO,aAAa,CAAC,CAAA;AAAA,UAAA,EACpH,SAAA,GAAY,CAAA,+EAAA,EAAkF,IAAA,CAAK,MAAA,CAAO,OAAO,CAAC,CAAA,wEAAA,EAA2E,IAAA,CAAK,WAAW,CAAC,CAAA,+CAAA,EAAkD,IAAA,CAAK,OAAO,IAAI,CAAC,CAAA,wBAAA,CAAA,GAAwB,CAAA,iEAAA,EAAoE,SAAS,CAAA,+CAAA,EAAkD,KAAK,gBAAA,IAAoB,MAAA,CAAO,MAAM,CAAC,CAAA,iBAAA,CAAmB;AAAA,UAAA,EACle,UAAU;AAAA,oDAAA,EAC2B,IAAA,CAAK,MAAA,CAAO,SAAS,CAAC,CAAA,EAAG,IAAA,CAAK,UAAA,GAAa,EAAA,GAAK,CAAA,MAAA,EAAM,IAAA,CAAK,MAAA,CAAO,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,kBAAA,CAAA;AAEpH,MAAA,IAAA,CAAK,aAAA,EAAc;AACnB,MAAA,IAAA,CAAK,aAAA,EAAc;AACnB,MAAA,IAAI,IAAA,CAAK,mBAAA,EAAqB,IAAA,CAAK,gBAAA,EAAiB;AACpD,MAAA,IAAA,CAAK,IAAA,EAAK;AAAA,IACZ;AAAA,IAEA,aAAA,GAAgB;AACd,MAAA,MAAM,EAAE,QAAA,EAAU,UAAA,EAAW,GAAI,IAAA,CAAK,MAAA;AACtC,MAAA,IAAI,CAAC,QAAA,EAAU;AACf,MAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA;AAC5C,MAAA,KAAA,CAAM,QAAQ,gBAAA,GAAmB,MAAA;AACjC,MAAA,IAAI,UAAA,EAAY,KAAA,CAAM,YAAA,CAAa,OAAA,EAAS,UAAU,CAAA;AACtD,MAAA,KAAA,CAAM,WAAA,GAAc,QAAA;AACpB,MAAA,IAAA,CAAK,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,IACxB;AAAA,IAEA,IAAA,GAAO;AACL,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,WAAW,CAAA;AACpD,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,QAAQ,CAAA;AAC9C,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,WAAW,CAAA;AACnD,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,WAAW,CAAA;AAChD,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,eAAe,CAAA;AAC3D,MAAA,IAAI,QAAA,WAAmB,OAAA,GAAU,MAAM,KAAK,MAAA,CAAO,CAAC,KAAK,MAAM,CAAA;AAC/D,MAAA,IAAI,OAAO,KAAA,CAAM,OAAA,GAAU,MAAM,IAAA,CAAK,OAAO,KAAK,CAAA;AAClD,MAAA,IAAI,OAAA,EAAS,OAAA,CAAQ,OAAA,GAAU,MAAM,KAAK,eAAA,EAAgB;AAC1D,MAAA,IAAI,WAAA,EAAa,WAAA,CAAY,OAAA,GAAU,MAAM,KAAK,kBAAA,EAAmB;AACrE,MAAA,IAAI,IAAA;AACF,QAAA,IAAA,CAAK,QAAA,GAAW,CAAC,KAAA,KAAU;AACzB,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,UAAU,CAAA;AAChD,UAAA,MAAM,OAAA,GAAU,KAAA,CAAM,KAAA,CAAM,IAAA,EAAK;AACjC,UAAA,IAAI,CAAC,OAAA,IAAW,IAAA,CAAK,IAAA,EAAM;AAC3B,UAAA,KAAA,CAAM,KAAA,GAAQ,EAAA;AACd,UAAA,IAAA,CAAK,KAAK,OAAO,CAAA;AAAA,QACnB,CAAA;AACF,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,UAAU,CAAA;AACnD,MAAA,IAAI,QAAA;AACF,QAAA,QAAA,CAAS,SAAA,GAAY,CAAC,KAAA,KAAU;AAC9B,UAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,OAAA,IAAW,CAAC,MAAM,QAAA,EAAU;AAC5C,YAAA,KAAA,CAAM,cAAA,EAAe;AACrB,YAAA,IAAA,EAAM,aAAA,EAAc;AAAA,UACtB;AAAA,QACF,CAAA;AACF,MAAA,IAAA,CAAK,KAAK,gBAAA,CAAiB,iBAAiB,CAAA,CAAE,OAAA,CAAQ,CAAC,MAAA,KAAW;AAChE,QAAA,MAAA,CAAO,OAAA,GAAU,MAAM,IAAA,CAAK,IAAA,CAAK,OAAO,WAAW,CAAA;AAAA,MACrD,CAAC,CAAA;AACD,MAAA,IAAA,CAAK,KAAK,gBAAA,CAAiB,cAAc,CAAA,CAAE,OAAA,CAAQ,CAAC,MAAA,KAAW;AAC7D,QAAA,MAAA,CAAO,UAAU,MAAM,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,QAAQ,KAAK,CAAA;AAAA,MACvD,CAAC,CAAA;AACD,MAAA,IAAA,CAAK,KAAK,gBAAA,CAAiB,2BAA2B,CAAA,CAAE,OAAA,CAAQ,CAAC,QAAA,KAAa;AAC5E,QAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,aAAA,CAAc,uBAAuB,CAAA;AAC5D,QAAA,MAAM,QAAA,GAAW,QAAA,CAAS,aAAA,CAAc,2BAA2B,CAAA;AACnE,QAAA,MAAM,IAAA,GAAO,QAAA,CAAS,aAAA,CAAc,0BAA0B,CAAA;AAC9D,QAAA,IAAI,CAAC,KAAA,IAAS,CAAC,QAAA,IAAY,CAAC,IAAA,EAAM;AAClC,QAAA,MAAM,SAAS,MAAM;AACnB,UAAA,QAAA,CAAS,QAAA,GAAW,MAAM,UAAA,IAAc,CAAA;AACxC,UAAA,IAAA,CAAK,WAAW,KAAA,CAAM,UAAA,IAAc,KAAA,CAAM,WAAA,GAAc,MAAM,WAAA,GAAc,CAAA;AAAA,QAC9E,CAAA;AACA,QAAA,MAAM,IAAA,GAAO,CAAC,SAAA,KAAc;AAC1B,UAAA,MAAM,QAAQ,CAAC,GAAG,KAAA,CAAM,gBAAA,CAAiB,iBAAiB,CAAC,CAAA;AAC3D,UAAA,IAAI,CAAC,MAAM,MAAA,EAAQ;AACnB,UAAA,MAAM,UAAU,KAAA,CAAM,MAAA;AAAA,YACpB,CAAC,SAAS,IAAA,EAAM,KAAA,KACd,KAAK,GAAA,CAAI,IAAA,CAAK,aAAa,KAAA,CAAM,UAAU,IAC3C,IAAA,CAAK,GAAA,CAAI,MAAM,OAAO,CAAA,CAAE,aAAa,KAAA,CAAM,UAAU,IACjD,KAAA,GACA,OAAA;AAAA,YACN;AAAA,WACF;AACA,UAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,OAAA,GAAU,SAAS,CAAC,CAAC,CAAA;AACjF,UAAA,KAAA,CAAM,QAAA,CAAS,EAAE,IAAA,EAAM,MAAA,CAAO,UAAA,GAAa,KAAA,CAAM,CAAC,CAAA,CAAE,UAAA,EAAY,QAAA,EAAU,QAAA,EAAU,CAAA;AACpF,UAAA,MAAA,CAAO,UAAA,CAAW,QAAQ,GAAG,CAAA;AAAA,QAC/B,CAAA;AACA,QAAA,QAAA,CAAS,OAAA,GAAU,MAAM,IAAA,CAAK,EAAE,CAAA;AAChC,QAAA,IAAA,CAAK,OAAA,GAAU,MAAM,IAAA,CAAK,CAAC,CAAA;AAC3B,QAAA,KAAA,CAAM,QAAA,GAAW,MAAA;AACjB,QAAA,MAAA,EAAO;AAAA,MACT,CAAC,CAAA;AACD,MAAA,IAAA,CAAK,KAAK,gBAAA,CAAiB,aAAa,CAAA,CAAE,OAAA,CAAQ,CAAC,MAAA,KAAW;AAC5D,QAAA,MAAA,CAAO,UAAU,MAAM;AACrB,UAAA,IAAI,IAAA,CAAK,MAAA,CAAO,kBAAA,EAAoB,IAAA,CAAK,OAAO,KAAK,CAAA;AACrD,UAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,MAAA,CAAO,QAAQ,SAAS,CAAA;AACzD,UAAA,IAAA,CAAK,KAAK,0BAAA,EAA4B;AAAA,YACpC,IAAA,EAAM,OAAO,OAAA,CAAQ,IAAA;AAAA,YACrB,SAAA,EAAW,OAAO,OAAA,CAAQ,SAAA;AAAA,YAC1B,GAAI,SAAS,GAAA,GAAM,EAAE,KAAK,OAAA,CAAQ,GAAA,KAAQ;AAAC,WAC5C,CAAA;AAAA,QACH,CAAA;AAAA,MACF,CAAC,CAAA;AACD,MAAA,IAAA,CAAK,KAAK,gBAAA,CAAiB,yBAAyB,CAAA,CAAE,OAAA,CAAQ,CAAC,MAAA,KAAW;AACxE,QAAA,MAAA,CAAO,UAAU,MAAM;AACrB,UAAA,IAAA,CAAK,cAAA,CAAe,MAAA,CAAO,OAAA,CAAQ,cAAA,EAAgB,MAAM,CAAA;AAAA,QAC3D,CAAA;AAAA,MACF,CAAC,CAAA;AACD,MAAA,IAAA,CAAK,KAAK,gBAAA,CAAiB,YAAY,CAAA,CAAE,OAAA,CAAQ,CAAC,MAAA,KAAW;AAC3D,QAAA,MAAA,CAAO,UAAU,MAAM;AACrB,UAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,MAAA,CAAO,QAAQ,GAAG,CAAA;AACnD,UAAA,IAAI,CAAC,OAAA,EAAS;AACd,UAAA,IAAA,CAAK,cAAA,CAAe,SAAS,MAAM,CAAA;AAAA,QACrC,CAAA;AAAA,MACF,CAAC,CAAA;AACD,MAAA,IAAA,CAAK,KAAK,gBAAA,CAAiB,gBAAgB,CAAA,CAAE,OAAA,CAAQ,CAAC,MAAA,KAAW;AAC/D,QAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,MAAA,CAAO,QAAQ,SAAS,CAAA;AACzD,QAAA,MAAM,YAAA,GACJ,MAAA,CAAO,OAAA,CAAQ,OAAA,KAAY,MAAA,GACvB,OAAA,EAAS,YAAA,GACT,MAAA,CAAO,OAAA,CAAQ,OAAA,KAAY,OAAA,GACzB,OAAA,EAAS,aAAA,GACT,EAAA;AACR,QAAA,IAAI,YAAA,IAAgB,CAAC,GAAG,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,CAAC,MAAA,KAAW,MAAA,CAAO,KAAA,KAAU,YAAY,CAAA,EAAG;AACvF,UAAA,MAAA,CAAO,KAAA,GAAQ,YAAA;AACf,UAAA,IAAA,CAAK,qBAAqB,EAAC;AAC3B,UAAA,IAAA,CAAK,gBAAA,CAAiB,MAAA,CAAO,OAAA,CAAQ,SAAS,MAAM,EAAC;AACrD,UAAA,IAAA,CAAK,gBAAA,CAAiB,OAAO,OAAA,CAAQ,SAAS,EAAE,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,GAAI,YAAA;AAAA,QAC5E;AACA,QAAA,MAAA,CAAO,WAAW,MAAM;AACtB,UAAA,IAAA,CAAK,qBAAqB,EAAC;AAC3B,UAAA,IAAA,CAAK,gBAAA,CAAiB,MAAA,CAAO,OAAA,CAAQ,SAAS,MAAM,EAAC;AACrD,UAAA,IAAA,CAAK,gBAAA,CAAiB,OAAO,OAAA,CAAQ,SAAS,EAAE,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,GAAI,MAAA,CAAO,KAAA;AAAA,QACnF,CAAA;AAAA,MACF,CAAC,CAAA;AACD,MAAA,IAAA,CAAK,KAAK,gBAAA,CAAiB,oBAAoB,CAAA,CAAE,OAAA,CAAQ,CAAC,MAAA,KAAW;AACnE,QAAA,MAAA,CAAO,UAAU,MAAM;AACrB,UAAA,MAAM,SAAA,GAAY,OAAO,OAAA,CAAQ,SAAA;AACjC,UAAA,IAAA,CAAK,qBAAqB,EAAC;AAC3B,UAAA,IAAA,CAAK,gBAAA,CAAiB,SAAS,CAAA,KAAM,EAAC;AACtC,UAAA,IAAA,CAAK,gBAAA,CAAiB,SAAS,CAAA,CAAE,KAAA,GAAQ,OAAO,OAAA,CAAQ,UAAA;AACxD,UAAA,MAAA,CAAO,eAAe,gBAAA,CAAiB,oBAAoB,CAAA,CAAE,OAAA,CAAQ,CAAC,IAAA,KAAS;AAC7E,YAAA,IAAA,CAAK,YAAA,CAAa,cAAA,EAAgB,MAAA,CAAO,IAAA,KAAS,MAAM,CAAC,CAAA;AAAA,UAC3D,CAAC,CAAA;AACD,UAAA,MAAM,QAAQ,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG,cAAc,eAAe,CAAA;AACpE,UAAA,IAAI,KAAA,EAAO,KAAA,CAAM,WAAA,GAAc,MAAA,CAAO,OAAA,CAAQ,UAAA;AAAA,QAChD,CAAA;AAAA,MACF,CAAC,CAAA;AACD,MAAA,IAAA,CAAK,KAAK,gBAAA,CAAiB,iBAAiB,CAAA,CAAE,OAAA,CAAQ,CAAC,MAAA,KAAW;AAChE,QAAA,MAAA,CAAO,OAAA,GAAU,MACf,IAAA,CAAK,cAAA,CAAe,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,YAAY,CAAA,EAAG,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAC,CAAA;AAAA,MAC5F,CAAC,CAAA;AACD,MAAA,IAAA,CAAK,KAAK,gBAAA,CAAiB,mBAAmB,CAAA,CAAE,OAAA,CAAQ,CAAC,IAAA,KAAS;AAChE,QAAA,IAAA,CAAK,OAAA,GAAU,MACb,IAAA,CAAK,IAAA,CAAK,yBAAA,EAA2B;AAAA,UACnC,KAAK,IAAA,CAAK,IAAA;AAAA,UACV,KAAA,EAAO,IAAA,CAAK,WAAA,EAAa,IAAA,EAAK,IAAK;AAAA,SACpC,CAAA;AAAA,MACL,CAAC,CAAA;AACD,MAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,uBAAuB,CAAA;AACtE,MAAA,IAAI,cAAA,EAAgB,cAAA,CAAe,OAAA,GAAU,MAAM,KAAK,eAAA,EAAgB;AACxE,MAAA,IAAA,CAAK,cAAA,EAAe;AAAA,IACtB;AAAA,IAEA,kBAAkB,OAAA,EAAS;AACzB,MAAA,OAAA,CAAQ,KAAA,CAAM,QAAQ,OAAA,EAAS,QAAQ,IAAI,OAAA,CAAQ,QAAA,GAAW,EAAC,EAAG,MAAA;AAAA,QAChE,CAAC,OAAA,KAAY,OAAA,EAAS,SAAA,KAAc;AAAA,OACtC;AAAA,IACF;AAAA,IAEA,eAAA,CAAgB,OAAA,EAAS,QAAA,GAAW,EAAC,EAAG;AACtC,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,iBAAA,CAAkB,OAAO,CAAA;AAC/C,MAAA,IAAI,CAAC,QAAA,CAAS,MAAA,EAAQ,OAAO,OAAA,EAAS,YAAY,EAAE,EAAA,EAAI,OAAA,CAAQ,SAAA,EAAU,GAAI,IAAA;AAC9E,MAAA,OACE,QAAA,CAAS,IAAA;AAAA,QACP,CAAC,OAAA,KAAA,CACE,CAAC,QAAA,CAAS,QAAQ,OAAA,CAAQ,IAAA,KAAS,QAAA,CAAS,IAAA,MAC5C,CAAC,QAAA,CAAS,KAAA,IAAS,OAAA,CAAQ,UAAU,QAAA,CAAS,KAAA;AAAA,OACnD,IAAK,IAAA;AAAA,IAET;AAAA,IAEA,cAAA,CAAe,WAAW,OAAA,EAAS;AACjC,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,SAAS,CAAA;AAC1C,MAAA,IAAI,CAAC,OAAA,IAAW,OAAA,CAAQ,WAAW,KAAA,IAAS,OAAA,CAAQ,YAAY,KAAA,EAAO;AACvE,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,iBAAA,CAAkB,OAAO,CAAA;AAC/C,MAAA,MAAM,SAAA,GACJ,QAAA,CAAS,IAAA,CAAK,CAAC,OAAA,KAAY,QAAQ,EAAA,KAAO,OAAA,CAAQ,SAAS,CAAA,IAC3D,QAAA,CAAS,IAAA;AAAA,QACP,CAAC,OAAA,KAAA,CACE,CAAC,OAAA,CAAQ,gBAAgB,OAAA,CAAQ,IAAA,KAAS,OAAA,CAAQ,YAAA,MAClD,CAAC,OAAA,CAAQ,aAAA,IAAiB,OAAA,CAAQ,UAAU,OAAA,CAAQ,aAAA;AAAA,OACzD,IACA,SAAS,CAAC,CAAA;AACZ,MAAA,IAAA,CAAK,qBAAqB,EAAC;AAC3B,MAAA,IAAA,CAAK,gBAAA,CAAiB,OAAA,CAAQ,EAAE,CAAA,GAAI;AAAA,QAClC,IAAA,EAAM,WAAW,IAAA,IAAQ,OAAA,CAAQ,gBAAgB,OAAA,CAAQ,KAAA,GAAQ,CAAC,CAAA,IAAK,EAAA;AAAA,QACvE,KAAA,EAAO,WAAW,KAAA,IAAS,OAAA,CAAQ,iBAAiB,OAAA,CAAQ,MAAA,GAAS,CAAC,CAAA,IAAK,EAAA;AAAA,QAC3E,QAAA,EAAU,OAAO,IAAA,CAAK,gBAAA,CAAiB,QAAQ,EAAE,CAAA,EAAG,QAAQ,CAAA,IAAK;AAAA,OACnE;AACA,MAAA,IAAA,CAAK,sBAAsB,OAAA,CAAQ,EAAA;AACnC,MAAA,IAAA,CAAK,oBAAoB,OAAA,IAAW,IAAA;AACpC,MAAA,IAAA,CAAK,gBAAA,EAAiB;AAAA,IACxB;AAAA,IAEA,gBAAgB,EAAE,YAAA,GAAe,IAAA,EAAK,GAAI,EAAC,EAAG;AAC5C,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,cAAc,CAAA;AACrD,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,uBAAuB,CAAA;AAChE,MAAA,IAAI,MAAA,SAAe,MAAA,GAAS,IAAA;AAC5B,MAAA,IAAI,QAAA,WAAmB,MAAA,GAAS,IAAA;AAChC,MAAA,IAAA,CAAK,mBAAA,GAAsB,EAAA;AAC3B,MAAA,IAAI,YAAA,EAAc,IAAA,CAAK,iBAAA,EAAmB,KAAA,EAAM;AAChD,MAAA,IAAA,CAAK,iBAAA,GAAoB,IAAA;AAAA,IAC3B;AAAA,IAEA,gBAAA,GAAmB;AACjB,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,cAAc,CAAA;AACrD,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,uBAAuB,CAAA;AAChE,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,mBAAmB,CAAA;AACzD,MAAA,IACE,CAAC,MAAA,IACD,CAAC,QAAA,IACD,CAAC,OAAA,IACD,OAAA,CAAQ,MAAA,KAAW,KAAA,IACnB,OAAA,CAAQ,OAAA,KAAY,KAAA,EACpB;AACA,QAAA,IAAA,CAAK,eAAA,CAAgB,EAAE,YAAA,EAAc,KAAA,EAAO,CAAA;AAC5C,QAAA;AAAA,MACF;AACA,MAAA,MAAM,WAAW,IAAA,CAAK,gBAAA,GAAmB,OAAA,CAAQ,EAAE,KAAK,EAAC;AACzD,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,iBAAA,CAAkB,OAAO,CAAA;AAC/C,MAAA,MAAM,KAAA,GAAQ,UAAA;AAAA,QACZ,SAAS,GAAA,CAAI,CAAC,YAAY,OAAA,CAAQ,IAAI,EAAE,MAAA,CAAO,OAAO,CAAA,CAAE,MAAA,GACpD,SAAS,GAAA,CAAI,CAAC,YAAY,OAAA,CAAQ,IAAI,IACtC,OAAA,CAAQ;AAAA,OACd;AACA,MAAA,IAAI,KAAA,CAAM,MAAA,IAAU,CAAC,KAAA,CAAM,QAAA,CAAS,QAAA,CAAS,IAAI,CAAA,EAAG,QAAA,CAAS,IAAA,GAAO,KAAA,CAAM,CAAC,CAAA;AAC3E,MAAA,MAAM,gBAAgB,QAAA,CAAS,MAAA;AAAA,QAC7B,CAAC,OAAA,KAAY,CAAC,QAAA,CAAS,IAAA,IAAQ,CAAC,OAAA,CAAQ,IAAA,IAAQ,OAAA,CAAQ,IAAA,KAAS,QAAA,CAAS;AAAA,OAC5E;AACA,MAAA,MAAM,MAAA,GAAS,UAAA;AAAA,QACb,cAAc,GAAA,CAAI,CAAC,YAAY,OAAA,CAAQ,KAAK,EAAE,MAAA,CAAO,OAAO,CAAA,CAAE,MAAA,GAC1D,cAAc,GAAA,CAAI,CAAC,YAAY,OAAA,CAAQ,KAAK,IAC5C,OAAA,CAAQ;AAAA,OACd;AACA,MAAA,IAAI,MAAA,CAAO,MAAA,IAAU,CAAC,MAAA,CAAO,QAAA,CAAS,QAAA,CAAS,KAAK,CAAA,EAAG,QAAA,CAAS,KAAA,GAAQ,MAAA,CAAO,CAAC,CAAA;AAChF,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,eAAA,CAAgB,OAAA,EAAS,QAAQ,CAAA;AACvD,MAAA,MAAM,YAAY,CAAC,QAAA,CAAS,MAAA,IAAU,OAAA,CAAQ,UAAU,EAAE,CAAA;AAC1D,MAAA,MAAA,CAAO,SAAA,GAAY,CAAA;AAAA,oDAAA,EAC6B,IAAA,CAAK,OAAA,CAAQ,QAAQ,CAAC,eAAe,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAC,CAAA,oEAAA,EAAuE,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,YAAY,CAAC,CAAA;AAAA,QAAA,EACxM,KAAA,CAAM,MAAA,GAAS,CAAA,kBAAA,EAAqB,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,IAAI,CAAC,CAAA,qCAAA,EAAwC,KAAA,CAAM,GAAA,CAAI,CAAC,SAAS,CAAA,mEAAA,EAAsE,IAAA,CAAK,IAAI,CAAC,CAAA,gBAAA,EAAmB,IAAA,KAAS,QAAA,CAAS,IAAI,KAAK,IAAA,CAAK,IAAI,CAAC,CAAA,SAAA,CAAW,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,sBAAsB,EAAE;AAAA,QAAA,EAC3S,MAAA,CAAO,MAAA,GAAS,CAAA,kBAAA,EAAqB,IAAA,CAAK,KAAK,MAAA,CAAO,KAAK,CAAC,CAAA,mDAAA,EAAsD,OAAO,GAAA,CAAI,CAAC,KAAA,KAAU,CAAA,oEAAA,EAAuE,KAAK,KAAK,CAAC,CAAA,gBAAA,EAAmB,KAAA,KAAU,SAAS,KAAK,CAAA,qBAAA,EAAwB,WAAA,CAAY,KAAK,CAAC,CAAA,MAAA,EAAS,IAAA,CAAK,KAAK,CAAC,WAAW,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,sBAAsB,EAAE;AAAA,QAAA,EAChX,IAAA,CAAK,MAAA,CAAO,YAAA,GAAe,CAAA,qCAAA,EAAwC,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAC,CAAA,2CAAA,EAA8C,QAAA,CAAS,QAAA,KAAa,CAAA,GAAI,WAAA,GAAc,EAAE,CAAA,kBAAA,EAAqB,QAAA,CAAS,QAAA,KAAa,CAAA,GAAI,WAAA,GAAc,EAAE,CAAA,kBAAA,EAAqB,QAAA,CAAS,QAAA,KAAa,CAAA,GAAI,WAAA,GAAc,EAAE,CAAA,4BAAA,CAAA,GAAiC,EAAE;AAAA,2DAAA,EACnS,KAAK,OAAA,CAAQ,EAAE,CAAC,CAAA,CAAA,EAAI,YAAY,EAAA,GAAK,WAAW,CAAA,CAAA,EAAI,IAAA,CAAK,YAAY,IAAA,CAAK,MAAA,CAAO,MAAM,IAAA,CAAK,MAAA,CAAO,UAAU,CAAC,CAAA,SAAA,CAAA;AACrK,MAAA,MAAA,CAAO,MAAA,GAAS,KAAA;AAChB,MAAA,QAAA,CAAS,MAAA,GAAS,KAAA;AAClB,MAAA,IAAA,CAAK,cAAA,EAAe;AACpB,MAAA,qBAAA,CAAsB,MAAM,MAAA,CAAO,aAAA,CAAc,0BAA0B,CAAA,EAAG,OAAO,CAAA;AAAA,IACvF;AAAA,IAEA,cAAA,GAAiB;AACf,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,cAAc,CAAA;AACrD,MAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,MAAA,EAAQ;AAC9B,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,aAAA,CAAc,0BAA0B,CAAA;AAC7D,MAAA,IAAI,KAAA,EAAO,KAAA,CAAM,OAAA,GAAU,MAAM,KAAK,eAAA,EAAgB;AACtD,MAAA,MAAA,CAAO,gBAAA,CAAiB,sBAAsB,CAAA,CAAE,OAAA,CAAQ,CAAC,MAAA,KAAW;AAClE,QAAA,MAAA,CAAO,UAAU,MAAM;AACrB,UAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,mBAAmB,CAAA;AACzD,UAAA,IAAI,CAAC,OAAA,EAAS;AACd,UAAA,IAAA,CAAK,qBAAqB,EAAC;AAC3B,UAAA,IAAA,CAAK,gBAAA,CAAiB,OAAA,CAAQ,EAAE,CAAA,KAAM,EAAC;AACvC,UAAA,IAAA,CAAK,gBAAA,CAAiB,QAAQ,EAAE,CAAA,CAAE,OAAO,OAAA,CAAQ,YAAY,CAAA,GAC3D,MAAA,CAAO,OAAA,CAAQ,WAAA;AACjB,UAAA,IAAA,CAAK,gBAAA,EAAiB;AAAA,QACxB,CAAA;AAAA,MACF,CAAC,CAAA;AACD,MAAA,MAAM,QAAA,GAAW,MAAA,CAAO,aAAA,CAAc,wBAAwB,CAAA;AAC9D,MAAA,IAAI,QAAA;AACF,QAAA,QAAA,CAAS,WAAW,MAAM;AACxB,UAAA,MAAM,QAAA,GAAW,IAAA,CAAK,gBAAA,GAAmB,IAAA,CAAK,mBAAmB,CAAA;AACjE,UAAA,IAAI,UAAU,QAAA,CAAS,QAAA,GAAW,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,IAAK,CAAA;AAAA,QAC9D,CAAA;AACF,MAAA,MAAM,GAAA,GAAM,MAAA,CAAO,aAAA,CAAc,YAAY,CAAA;AAC7C,MAAA,IAAI,GAAA;AACF,QAAA,GAAA,CAAI,UAAU,MAAM;AAClB,UAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,QAAQ,GAAG,CAAA;AAChD,UAAA,IAAI,OAAA,EAAS,IAAA,CAAK,cAAA,CAAe,OAAA,EAAS,GAAG,CAAA;AAAA,QAC/C,CAAA;AAAA,IACJ;AAAA,IAEA,cAAA,CAAe,SAAS,MAAA,EAAQ;AAC9B,MAAA,IAAI,CAAC,WAAW,OAAA,CAAQ,MAAA,KAAW,SAAS,OAAA,CAAQ,OAAA,KAAY,SAAS,MAAA,CAAO,QAAA;AAC9E,QAAA;AACF,MAAA,MAAM,WAAW,IAAA,CAAK,gBAAA,GAAmB,OAAA,CAAQ,EAAE,KAAK,EAAC;AACzD,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,eAAA,CAAgB,OAAA,EAAS,QAAQ,CAAA;AACtD,MAAA,MAAA,CAAO,QAAA,GAAW,IAAA;AAClB,MAAA,MAAA,CAAO,OAAA,CAAQ,SAAA,GAAY,MAAA,CAAO,WAAA,IAAe,KAAK,MAAA,CAAO,GAAA;AAC7D,MAAA,MAAA,CAAO,WAAA,GAAc,KAAK,MAAA,CAAO,MAAA;AACjC,MAAA,IAAA,CAAK,KAAK,sBAAA,EAAwB;AAAA,QAChC,WAAW,OAAA,CAAQ,EAAA;AAAA,QACnB,SAAA,EAAW,SAAS,EAAA,KAAO,CAAC,QAAQ,QAAA,EAAU,MAAA,GAAS,QAAQ,SAAA,GAAY,MAAA,CAAA;AAAA,QAC3E,MAAM,OAAA,CAAQ,IAAA;AAAA,QACd,MAAM,QAAA,CAAS,IAAA,IAAQ,QAAQ,YAAA,IAAgB,OAAA,CAAQ,QAAQ,CAAC,CAAA;AAAA,QAChE,OAAO,QAAA,CAAS,KAAA,IAAS,QAAQ,aAAA,IAAiB,OAAA,CAAQ,SAAS,CAAC,CAAA;AAAA,QACpE,QAAA,EAAU,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,IAAK;AAAA,OACxC,CAAA;AACD,MAAA,MAAA,CAAO,aAAa,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,OAAA,CAAQ,EAAE,CAAC,CAAA;AACnD,MAAA,IAAA,CAAK,UAAA,CAAW,GAAA;AAAA,QACd,OAAA,CAAQ,EAAA;AAAA,QACR,MAAA,CAAO,WAAW,MAAM;AACtB,UAAA,IAAA,CAAK,UAAA,CAAW,EAAE,MAAA,EAAQ,EAAE,WAAW,OAAA,CAAQ,EAAA,IAAM,CAAA;AACrD,UAAA,IAAA,CAAK,KAAK,mBAAA,EAAqB;AAAA,YAC7B,IAAA,EAAM,2BAAA;AAAA,YACN,WAAW,OAAA,CAAQ;AAAA,WACpB,CAAA;AAAA,QACH,GAAG,GAAM;AAAA,OACX;AAAA,IACF;AAAA,IAEA,OAAO,IAAA,EAAM;AACX,MAAA,IAAI,CAAC,QAAQ,IAAA,CAAK,mBAAA,OAA0B,eAAA,CAAgB,EAAE,YAAA,EAAc,KAAA,EAAO,CAAA;AACnF,MAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,MAAA,IAAA,CAAK,oBAAoB,IAAI,CAAA;AAC7B,MAAA,IAAA,CAAK,KAAK,aAAA,CAAc,QAAQ,GAAG,SAAA,CAAU,MAAA,CAAO,WAAW,IAAI,CAAA;AACnE,MAAA,IAAA,CAAK,IAAA,CAAK,cAAc,QAAQ,CAAA,EAAG,aAAa,aAAA,EAAe,MAAA,CAAO,CAAC,IAAI,CAAC,CAAA;AAC5E,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,WAAW,CAAA;AACpD,MAAA,QAAA,EAAU,YAAA,CAAa,eAAA,EAAiB,MAAA,CAAO,IAAI,CAAC,CAAA;AACpD,MAAA,IAAI,QAAA,WAAmB,MAAA,GAAS,IAAA;AAChC,MAAA,IAAI,IAAA,IAAQ,CAAC,IAAA,CAAK,gBAAA,EAAiB,EAAG;AACpC,QAAA,qBAAA;AAAA,UAAsB,MAAA,CAElB,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,UAAU,CAAA,IAAK,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,eAAe,CAAA,GAC7E,KAAA;AAAM,SACX;AAAA,MACF;AACA,MAAA,IAAA,CAAK,IAAA,CAAK,IAAA,GAAO,kBAAA,GAAqB,mBAAA,EAAqB,EAAE,CAAA;AAAA,IAC/D;AAAA,IAEA,gBAAA,GAAmB;AACjB,MAAA,OACE,OAAO,MAAA,CAAO,UAAA,KAAe,cAC7B,MAAA,CAAO,UAAA,CAAW,uCAAuC,CAAA,CAAE,OAAA;AAAA,IAE/D;AAAA,IAEA,oBAAoB,MAAA,EAAQ;AAC1B,MAAA,IAAI,MAAA,IAAU,IAAA,CAAK,gBAAA,EAAiB,EAAG;AACrC,QAAA,IAAI,IAAA,CAAK,2BAA2B,MAAA,EAAW;AAC7C,UAAA,IAAA,CAAK,sBAAA,GAAyB,QAAA,CAAS,eAAA,CAAgB,KAAA,CAAM,QAAA;AAAA,QAC/D;AACA,QAAA,QAAA,CAAS,eAAA,CAAgB,MAAM,QAAA,GAAW,QAAA;AAC1C,QAAA;AAAA,MACF;AACA,MAAA,IAAI,IAAA,CAAK,2BAA2B,MAAA,EAAW;AAC7C,QAAA,QAAA,CAAS,eAAA,CAAgB,KAAA,CAAM,QAAA,GAAW,IAAA,CAAK,sBAAA;AAC/C,QAAA,IAAA,CAAK,sBAAA,GAAyB,MAAA;AAAA,MAChC;AAAA,IACF;AAAA,IAEA,IAAA,GAAO;AACL,MAAA,IAAA,CAAK,OAAO,IAAI,CAAA;AAAA,IAClB;AAAA,IACA,KAAA,GAAQ;AACN,MAAA,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,IACnB;AAAA,IACA,UAAA,GAAa;AACX,MAAA,OAAO,KAAK,eAAA,EAAgB;AAAA,IAC9B;AAAA,IACA,YAAA,GAAe;AACb,MAAA,IAAA,CAAK,SAAS,YAAA,EAAa;AAAA,IAC7B;AAAA,IACA,aAAA,CAAc,OAAA,GAAU,EAAC,EAAG;AAC1B,MAAA,IAAA,CAAK,UAAU,EAAE,GAAG,IAAA,CAAK,OAAA,EAAS,GAAG,OAAA,EAAQ;AAAA,IAC/C;AAAA,IACA,OAAA,GAAU;AACR,MAAA,IAAA,CAAK,MAAA,EAAO;AAAA,IACd;AAAA,IAEA,gBAAgB,KAAA,EAAO;AACrB,MAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,QAAA,IAAY,IAAA,CAAK,mBAAA,EAAqB;AACtD,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,IAAA,CAAK,eAAA,EAAgB;AACrB,QAAA;AAAA,MACF;AACA,MAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,QAAA,IAAY,IAAA,CAAK,MAAA,EAAQ;AACzC,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,IAAA,CAAK,OAAO,KAAK,CAAA;AACjB,QAAA;AAAA,MACF;AACA,MAAA,IAAI,CAAC,IAAA,CAAK,MAAA,IAAU,KAAA,CAAM,QAAQ,KAAA,EAAO;AACzC,MAAA,MAAM,SAAA,GAAY;AAAA,QAChB,GAAG,KAAK,IAAA,CAAK,gBAAA;AAAA,UACX;AAAA;AACF,OACF;AACA,MAAA,IAAI,CAAC,UAAU,MAAA,EAAQ;AACvB,MAAA,MAAM,KAAA,GAAQ,UAAU,CAAC,CAAA;AACzB,MAAA,MAAM,IAAA,GAAO,SAAA,CAAU,EAAA,CAAG,EAAE,CAAA;AAC5B,MAAA,IAAI,KAAA,CAAM,QAAA,IAAY,IAAA,CAAK,IAAA,CAAK,kBAAkB,KAAA,EAAO;AACvD,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,IAAA,CAAK,KAAA,EAAM;AAAA,MACb,WAAW,CAAC,KAAA,CAAM,YAAY,IAAA,CAAK,IAAA,CAAK,kBAAkB,IAAA,EAAM;AAC9D,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,KAAA,CAAM,KAAA,EAAM;AAAA,MACd;AAAA,IACF;AAAA,IAEA,IAAA,CAAK,MAAM,MAAA,EAAQ;AACjB,MAAA,IAAA,CAAK,aAAA,CAAc,IAAI,WAAA,CAAY,IAAA,EAAM,EAAE,MAAA,EAAQ,OAAA,EAAS,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,CAAC,CAAA;AAAA,IACrF;AAAA,IAEA,MAAM,eAAA,GAAkB;AACtB,MAAA,IAAA,CAAK,WAAW,EAAC;AACjB,MAAA,IAAI;AACF,QAAA,YAAA,CAAa,UAAA,CAAW,KAAK,UAAU,CAAA;AACvC,QAAA,cAAA,CAAe,UAAA,CAAW,KAAK,UAAU,CAAA;AAAA,MAC3C,CAAA,CAAA,MAAQ;AAAA,MAER;AACA,MAAA,MAAM,IAAA,CAAK,SAAS,UAAA,EAAW;AAC/B,MAAA,IAAA,CAAK,aAAA,EAAc;AACnB,MAAA,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,UAAU,CAAA,EAAG,KAAA,EAAM;AAC3C,MAAA,IAAA,CAAK,IAAA,CAAK,yBAAA,EAA2B,EAAE,CAAA;AAAA,IACzC;AAAA,IAEA,MAAM,WAAA,GAAc;AAClB,MAAA,IAAI;AACF,QAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,IAAA,CAAK,OAAO,UAAA,EAAY;AAAA,UACnD,OAAA,EAAS,EAAE,MAAA,EAAQ,kBAAA,EAAmB;AAAA,UACtC,WAAA,EAAa;AAAA,SACd,CAAA;AACD,QAAA,IAAI,CAAC,QAAA,CAAS,EAAA,EAAI,MAAM,IAAI,MAAM,wBAAqB,CAAA;AACvD,QAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,QAAA,IAAA,CAAK,UAAU,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,QAAQ,IACtC,IAAA,CAAK,QAAA,GACL,KAAA,CAAM,OAAA,CAAQ,KAAK,IAAA,EAAM,QAAQ,IAC/B,IAAA,CAAK,IAAA,CAAK,WACV,EAAC;AAAA,MACT,CAAA,CAAA,MAAQ;AACN,QAAA,IAAA,CAAK,UAAU,EAAC;AAAA,MAClB;AAAA,IACF;AAAA,IAEA,YAAY,EAAA,EAAI;AACd,MAAA,MAAM,QAAA,GAAW,MAAA,CAAO,EAAA,IAAM,EAAE,CAAA;AAChC,MAAA,OACE,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,CAAC,IAAA,KAAS,MAAA,CAAO,IAAA,CAAK,EAAE,CAAA,KAAM,QAAQ,CAAA,IACxD,IAAA,CAAK,QAAA,CACF,OAAA,CAAQ,CAAC,OAAA,KAAY,OAAA,CAAQ,QAAA,IAAY,EAAE,CAAA,CAC3C,IAAA,CAAK,CAAC,IAAA,KAAS,MAAA,CAAO,IAAA,CAAK,EAAE,CAAA,KAAM,QAAQ,CAAA;AAAA,IAElD;AAAA,IAEA,OAAA,GAAU;AACR,MAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,cAAA,EAAgB;AACjC,MAAA,IAAI;AACF,QAAA,MAAM,UAAA,GACJ,YAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,UAAU,KAAK,cAAA,CAAe,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,IAAK,IAAA;AACtF,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,UAAU,CAAA;AACnC,QAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,KAAA,CAAM,cAAc,CAAA;AAClD,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,EAAI,GAAI,cAAA;AACzB,QAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,cAAc,CAAA,IAAK,MAAM,CAAA,IAAK,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,eAAA,EAAiB;AACpF,UAAA,YAAA,CAAa,UAAA,CAAW,KAAK,UAAU,CAAA;AACvC,UAAA,cAAA,CAAe,UAAA,CAAW,KAAK,UAAU,CAAA;AACzC,UAAA;AAAA,QACF;AACA,QAAA,IAAA,CAAK,QAAA,GAAW,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,QAAQ,IACxC,KAAA,CAAM,QAAA,CACH,KAAA,CAAM,CAAA,EAAG,CAAA,CACT,GAAA;AAAA,UAAI,CAAC,OAAA,KACJ,OAAA,EAAS,IAAA,KAAS,MAAA,GACd,EAAE,GAAG,OAAA,EAAS,IAAA,EAAM,eAAA,CAAgB,OAAA,CAAQ,IAAI,GAAE,GAClD;AAAA,YAER,EAAC;AACL,QAAA,YAAA,CAAa,OAAA;AAAA,UACX,IAAA,CAAK,UAAA;AAAA,UACL,KAAK,SAAA,CAAU,EAAE,UAAU,IAAA,CAAK,QAAA,EAAU,gBAAgB;AAAA,SAC5D;AACA,QAAA,cAAA,CAAe,UAAA,CAAW,KAAK,UAAU,CAAA;AACzC,QAAA,IAAA,CAAK,aAAA,EAAc;AAAA,MACrB,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAAA,IAEA,OAAA,GAAU;AACR,MAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,cAAA,EAAgB;AACjC,MAAA,IAAI;AACF,QAAA,YAAA,CAAa,OAAA;AAAA,UACX,IAAA,CAAK,UAAA;AAAA,UACL,KAAK,SAAA,CAAU;AAAA,YACb,QAAA,EAAU,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,CAAA;AAAA,YACjC,cAAA,EAAgB,KAAK,GAAA;AAAI,WAC1B;AAAA,SACH;AAAA,MACF,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAAA,IAEA,oBAAA,GAAuB;AACrB,MAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,cAAA,EAAgB;AACjC,MAAA,IAAI;AACF,QAAA,MAAM,GAAA,GACJ,aAAa,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,IAAK,cAAA,CAAe,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AACjF,QAAA,IAAI,CAAC,OAAO,YAAA,CAAa,OAAA,CAAQ,GAAG,IAAA,CAAK,UAAU,UAAU,CAAA,EAAG;AAChE,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC5B,QAAA,MAAM,YAAY,OAAO,KAAA,CAAM,WAAW,QAAA,GAAW,KAAA,CAAM,SAAS,KAAA,CAAM,SAAA;AAC1E,QAAA,IACE,mBAAA,CAAoB,IAAA,CAAK,SAAA,IAAa,EAAE,CAAA,IACxC,OAAO,KAAA,CAAM,WAAA,KAAgB,QAAA,IAC7B,KAAA,CAAM,WAAA,CAAY,MAAA,IAAU,EAAA,EAC5B;AACA,UAAA,YAAA,CAAa,OAAA;AAAA,YACX,CAAA,EAAG,KAAK,UAAU,CAAA,QAAA,CAAA;AAAA,YAClB,KAAK,SAAA,CAAU;AAAA,cACb,SAAA;AAAA,cACA,aAAa,KAAA,CAAM,WAAA;AAAA,cACnB,gBAAgB,MAAA,CAAO,KAAA,CAAM,cAAc,CAAA,IAAK,KAAK,GAAA;AAAI,aAC1D;AAAA,WACH;AAAA,QACF;AAAA,MACF,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAAA,IAEA,MAAM,cAAA,GAAiB;AACrB,MAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AACnB,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAQ;AACxC,QAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,UAAA,IAAA,CAAK,OAAA,EAAQ;AACb,UAAA;AAAA,QACF;AACA,QAAA,IAAA,CAAK,QAAA,GAAW,IAAA,CACb,MAAA,CAAO,CAAC,QAAQ,GAAA,EAAK,IAAA,KAAS,MAAA,IAAU,GAAA,EAAK,IAAA,KAAS,WAAW,CAAA,CACjE,GAAA,CAAI,CAAC,GAAA,KAAQ;AACZ,UAAA,IAAI,GAAA,CAAI,IAAA,KAAS,MAAA,EAAQ,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,eAAA,CAAgB,GAAA,CAAI,OAAO,CAAA,EAAE;AACnF,UAAA,OAAO;AAAA,YACL,IAAA,EAAM,WAAA;AAAA,YACN,GAAG,KAAK,eAAA,CAAgB;AAAA,cACtB,QAAQ,GAAA,CAAI,OAAA;AAAA,cACZ,WAAA,EAAa,GAAA,CAAI,WAAA,IAAe,GAAA,CAAI,QAAA,EAAU;AAAA,aAC/C;AAAA,WACH;AAAA,QACF,CAAC,CAAA,CACA,KAAA,CAAM,CAAA,EAAG,CAAA;AACZ,QAAA,IAAA,CAAK,OAAA,EAAQ;AACb,QAAA,IAAA,CAAK,aAAA,EAAc;AAAA,MACrB,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAAA,IAEA,MAAM,KAAK,OAAA,EAAS;AAClB,MAAA,IAAA,CAAK,OAAO,IAAI,CAAA;AAChB,MAAA,IAAI,CAAC,UAAU,MAAA,EAAQ;AACrB,QAAA,IAAA,CAAK,IAAA,CAAK,mBAAA,EAAqB,EAAE,IAAA,EAAM,WAAW,CAAA;AAClD,QAAA;AAAA,MACF;AACA,MAAA,IAAI,CAAC,IAAA,CAAK,KAAA,EAAO,MAAM,KAAK,WAAA,EAAY;AACxC,MAAA,MAAM,IAAA,CAAK,gBAAA;AACX,MAAA,IAAA,CAAK,SAAS,IAAA,CAAK,EAAE,MAAM,MAAA,EAAQ,IAAA,EAAM,SAAS,CAAA;AAClD,MAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,MAAA,IAAA,CAAK,YAAY,KAAA,EAAM;AACvB,MAAA,IAAA,CAAK,aAAA,EAAc;AACnB,MAAA,IAAA,CAAK,UAAU,IAAI,CAAA;AACnB,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,GAChB,MAAM,IAAA,CAAK,cAAA,CAAe,OAAO,CAAA,GACjC,MAAM,IAAA,CAAK,WAAA,CAAY,OAAO,CAAA;AAClC,QAAA,IAAA,CAAK,SAAS,IAAA,CAAK,EAAE,MAAM,WAAA,EAAa,GAAG,QAAQ,CAAA;AAAA,MACrD,SAAS,KAAA,EAAO;AACd,QAAA,IAAA,CAAK,SAAS,IAAA,CAAK;AAAA,UACjB,IAAA,EAAM,WAAA;AAAA,UACN,IAAA,EAAM,IAAA,CAAK,YAAA,CAAa,KAAK,CAAA;AAAA,UAC7B,UAAU,EAAC;AAAA,UACX,YAAA,EAAc,CAAC,IAAA,CAAK,MAAA,CAAO,KAAK;AAAA,SACjC,CAAA;AAAA,MACH,CAAA,SAAE;AACA,QAAA,IAAA,CAAK,IAAA,GAAO,KAAA;AACZ,QAAA,IAAA,CAAK,YAAY,KAAA,EAAM;AACvB,QAAA,IAAA,CAAK,UAAU,KAAK,CAAA;AACpB,QAAA,IAAA,CAAK,OAAA,EAAQ;AACb,QAAA,IAAA,CAAK,aAAA,EAAc;AAAA,MACrB;AAAA,IACF;AAAA,IAEA,MAAM,eAAe,eAAA,EAAiB;AACpC,MAAA,IAAI,CAAC,IAAA,CAAK,OAAA,EAAS,MAAM,IAAI,MAAM,iCAAiC,CAAA;AACpE,MAAA,MAAM,WAAA,GACJ,OAAO,IAAA,CAAK,eAAA,KAAoB,aAAa,MAAM,IAAA,CAAK,eAAA,EAAgB,GAAI,EAAC;AAC/E,MAAA,MAAM,OAAA,GAAU;AAAA,QACd,OAAO,QAAA,CAAS,KAAA;AAAA,QAChB,MAAM,QAAA,CAAS,QAAA;AAAA,QACf,GAAG,WAAA;AAAA,QACH,GAAG,IAAA,CAAK;AAAA,OACV;AACA,MAAA,IAAI,WAAA;AACJ,MAAA,IAAI,EAAA;AACJ,MAAA,IAAI,WAAA,GAAc,EAAA;AAClB,MAAA,IAAI;AACF,QAAA,WAAA,MAAiB,KAAA,IAAS,IAAA,CAAK,OAAA,CAAQ,iBAAA,CAAkB;AAAA,UACvD,OAAA,EAAS,eAAA;AAAA,UACT;AAAA,SACD,CAAA,EAAG;AACF,UAAA,IAAI,KAAA,CAAM,SAAS,OAAA,EAAS,MAAM,IAAI,KAAA,CAAM,KAAA,CAAM,SAAS,0BAA0B,CAAA;AACrF,UAAA,IAAI,KAAA,CAAM,IAAA,KAAS,WAAA,EAAa,WAAA,GAAc,MAAM,WAAA,IAAe,EAAA;AACnE,UAAA,IAAI,KAAA,CAAM,SAAS,YAAA,EAAc,IAAA,CAAK,kBAAkB,KAAA,CAAM,UAAA,EAAY,MAAM,QAAQ,CAAA;AACxF,UAAA,IAAI,KAAA,CAAM,SAAS,UAAA,EAAY,IAAA,CAAK,gBAAgB,KAAA,CAAM,UAAA,EAAY,MAAM,QAAQ,CAAA;AACpF,UAAA,IAAI,KAAA,CAAM,IAAA,KAAS,IAAA,EAAM,EAAA,GAAK,KAAA,CAAM,EAAA;AACpC,UAAA,IAAI,KAAA,CAAM,IAAA,KAAS,MAAA,EAAQ,WAAA,GAAc,KAAA,CAAM,MAAA;AAAA,QACjD;AACA,QAAA,IAAI,WAAA,KAAgB,KAAA,CAAA,EAAW,MAAM,IAAI,MAAM,kCAAkC,CAAA;AACjF,QAAA,OAAO,KAAK,eAAA,CAAgB,EAAE,QAAQ,WAAA,EAAa,EAAA,EAAI,aAAa,CAAA;AAAA,MACtE,SAAS,KAAA,EAAO;AACd,QAAA,IAAI,KAAA,EAAO,MAAA,KAAW,GAAA,EAAK,MAAM,KAAA;AACjC,QAAA,MAAM,IAAA,CAAK,QAAQ,UAAA,EAAW;AAC9B,QAAA,OAAO,IAAA,CAAK,eAAe,eAAe,CAAA;AAAA,MAC5C;AAAA,IACF;AAAA,IAEA,gBAAgB,MAAA,EAAQ;AACtB,MAAA,IAAI,KAAA,GAAQ,QAAQ,MAAA,IAAU,MAAA;AAC9B,MAAA,IAAI,SAAS,OAAO,KAAA,KAAU,YAAY,SAAA,IAAa,KAAA,UAAe,KAAA,CAAM,OAAA;AAC5E,MAAA,IAAI,SAAS,OAAO,KAAA,KAAU,YAAY,QAAA,IAAY,KAAA,UAAe,KAAA,CAAM,MAAA;AAC3E,MAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,QAAA,MAAM,SAAA,GAAY,KAAA,CACf,OAAA,CAAQ,mBAAA,EAAqB,EAAE,EAC/B,OAAA,CAAQ,SAAA,EAAW,EAAE,CAAA,CACrB,IAAA,EAAK;AACR,QAAA,IAAI;AACF,UAAA,KAAA,GAAQ,IAAA,CAAK,MAAM,SAAS,CAAA;AAAA,QAC9B,CAAA,CAAA,MAAQ;AACN,UAAA,KAAA,GAAQ,EAAE,OAAA,EAAS,SAAA,CAAU,KAAK,CAAA,EAAE;AAAA,QACtC;AAAA,MACF;AACA,MAAA,IAAI,CAAC,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,UAAkB,EAAE,OAAA,EAAS,SAAA,CAAU,KAAK,CAAA,EAAE;AAC7E,MAAA,MAAM,YAAYC,iCAAA,CAAgB,MAAA,EAAQ,EAAE,CAAA,IAAKA,iCAAA,CAAgB,MAAM,EAAE,CAAA;AACzE,MAAA,MAAM,SAAA,GAAY,SAAA,GACd,SAAA,CAAU,SAAA,CAAU,MAAA,CAAO,CAAC,QAAA,KAAa,QAAA,CAAS,IAAA,KAAS,SAAS,CAAA,GACpE,EAAC;AACL,MAAA,MAAM,cAAc,SAAA,GAChB,SAAA,CAAU,SAAA,CACP,MAAA,CAAO,CAAC,QAAA,KAAa,CAAC,OAAA,EAAS,gBAAA,EAAkB,QAAQ,CAAA,CAAE,QAAA,CAAS,QAAA,CAAS,IAAI,CAAC,CAAA,CAClF,GAAA,CAAI,CAAC,QAAA,MAAc,EAAE,EAAA,EAAI,QAAA,CAAS,EAAA,EAAI,IAAA,EAAM,SAAS,IAAA,EAAM,GAAG,QAAA,CAAS,UAAA,GAAa,CAAA,CACpF,KAAA,CAAM,CAAA,EAAG,CAAC,IACb,EAAC;AACL,MAAA,MAAM,YAAY,SAAA,CAAU,MAAA,GACxB,YACA,KAAA,CAAM,OAAA,CAAQ,MAAM,QAAQ,CAAA,GAC1B,KAAA,CAAM,QAAA,GACN,MAAM,OAAA,CAAQ,KAAA,CAAM,OAAO,CAAA,GACzB,KAAA,CAAM,UACN,EAAC;AACT,MAAA,MAAM,OAAA,GAAU,SAAA,EAAW,OAAA,IAAW,EAAC;AACvC,MAAA,MAAM,kBAAA,GAAqB,kBAAA;AAAA,QACzB,KAAA,CAAM,OAAA,IAAW,KAAA,CAAM,KAAA,IAAS,MAAM,MAAA,IAAU,wDAAA;AAAA,QAChD,KAAK,MAAA,CAAO,oBAAA;AAAA,QACZ,IAAA,CAAK;AAAA,OACP;AACA,MAAA,MAAM,iBAAA,GAAoB,OAAA,CACvB,MAAA,CAAO,CAAC,WAAW,CAAC,MAAA,CAAO,UAAA,IAAc,MAAA,CAAO,IAAA,KAAS,eAAe,CAAA,CACxE,GAAA,CAAI,CAAC,MAAA,KAAW;AACf,QAAA,MAAM,GAAA,GAAM,gBAAA;AAAA,UACV,MAAA,CAAO,OAAA,EAAS,GAAA,IAAO,MAAA,CAAO,OAAA,EAAS,IAAA;AAAA,UACvC,KAAK,MAAA,CAAO;AAAA,SACd;AACA,QAAA,OAAO,GAAA,GAAM,EAAE,GAAA,EAAK,KAAA,EAAO,WAAA,CAAY,GAAA,EAAK,MAAA,CAAO,KAAA,EAAO,IAAA,CAAK,MAAM,CAAA,EAAE,GAAI,IAAA;AAAA,MAC7E,CAAC,CAAA,CACA,MAAA,CAAO,OAAO,CAAA;AACjB,MAAA,MAAM,iBAAiB,CAAC,GAAG,mBAAmB,GAAG,kBAAA,CAAmB,OAAO,CAAA,CACxE,MAAA;AAAA,QACC,CAAC,MAAA,EAAQ,KAAA,EAAO,GAAA,KACd,GAAA,CAAI,SAAA,CAAU,CAAC,SAAA,KAAc,SAAA,CAAU,GAAA,KAAQ,MAAA,CAAO,GAAG,CAAA,KAAM;AAAA,OACnE,CACC,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AACb,MAAA,MAAM,QAAA,GAAW,SAAA,CACd,GAAA,CAAI,CAAC,KAAA,KAAU;AACd,QAAA,MAAM,EAAA,GAAK,WAAA;AAAA,UACT,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAS,KAAA,CAAM,MAAM,KAAA,CAAM,UAAA;AAAA,UACvD;AAAA,SACF;AACA,QAAA,MAAM,UAAA,GACJ,OAAO,UAAA,IAAc,OAAO,MAAM,UAAA,KAAe,QAAA,GAAW,MAAM,UAAA,GAAa,KAAA;AACjF,QAAA,MAAM,UACJ,IAAA,CAAK,MAAA,CAAO,aAAA,KAAkB,UAAA,GAC1B,gBAAgB,KAAK,CAAA,GACrB,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAC,IAAA,KAAS,OAAO,IAAA,CAAK,EAAE,MAAM,EAAE,CAAA;AACxD,QAAA,MAAM,eAAA,GAAkB,QAAQ,MAAA,CAAO,CAAC,WAAW,MAAA,CAAO,MAAA,CAAO,UAAU,CAAA,KAAM,EAAE,CAAA;AACnF,QAAA,MAAM,aAAa,eAAA,CAAgB,IAAA,CAAK,CAAC,MAAA,KAAW,MAAA,CAAO,SAAS,eAAe,CAAA;AACnF,QAAA,MAAM,YAAY,eAAA,CAAgB,IAAA,CAAK,CAAC,MAAA,KAAW,MAAA,CAAO,SAAS,UAAU,CAAA;AAC7E,QAAA,MAAM,kBAAA,GACJ,IAAA,CAAK,MAAA,CAAO,kBAAA,IACZ,QAAQ,OAAA,EAAS,SAAS,CAAA,IAC1B,OAAA,EAAS,8BAA8B,IAAA,IACvC,OAAA,EAAS,UAAA,KAAe,IAAA,IACxB,SAAS,OAAA,KAAY,IAAA;AACvB,QAAA,OAAO,OAAA,GACH;AAAA,UACE,GAAG,OAAA;AAAA,UACH,MAAA,EAAQ,SAAA;AAAA,YACN,UAAA,CAAW,MAAA,IAAU,UAAA,CAAW,KAAA,IAAS;AAAA,WAC3C;AAAA,UACA,OAAA,EAAS,CAAC,SAAA,IAAa,OAAA,CAAQ,UAAU,CAAA;AAAA,UACzC,MAAA,EAAA,CACG,CAAC,SAAA,IAAa,OAAA,CAAQ,SAAS,CAAA,IAAK,kBAAA,KACrC,QAAQ,OAAA,KAAY,KAAA;AAAA,UACtB,SAAA,EAAW,KAAK,MAAA,CAAO,IAAA;AAAA,UACvB,QAAA,EAAU,KAAK,MAAA,CAAO;AAAA,SACxB,GACA,IAAA;AAAA,MACN,CAAC,CAAA,CACA,MAAA,CAAO,OAAO,CAAA,CACd,KAAA,CAAM,GAAG,CAAC,CAAA;AACb,MAAA,OAAO;AAAA,QACL,MAAM,kBAAA,CAAmB,IAAA;AAAA,QACzB,OAAA,EAAS,cAAA;AAAA,QACT,QAAA;AAAA,QACA,WAAA;AAAA,QACA,cAAc,SAAA,GACV,SAAA,CAAU,WAAA,CACP,GAAA,CAAI,CAAC,IAAA,MAAU,EAAE,KAAA,EAAO,SAAA,CAAU,KAAK,KAAK,CAAA,EAAG,OAAO,SAAA,CAAU,IAAA,CAAK,KAAK,CAAA,EAAE,CAAE,CAAA,CAC9E,KAAA,CAAM,GAAG,CAAC,CAAA,GAAA,CACZ,MAAM,aAAA,IAAiB,KAAA,CAAM,kBAAkB,EAAC,EAC9C,MAAA,CAAO,CAAC,SAAS,OAAO,IAAA,KAAS,QAAQ,CAAA,CACzC,KAAA,CAAM,GAAG,CAAC,CAAA;AAAA,QACjB,WAAA,EAAa,MAAA,CAAO,MAAA,EAAQ,WAAA,IAAe,EAAE;AAAA,OAC/C;AAAA,IACF;AAAA,IAEA,MAAM,YAAY,OAAA,EAAS;AACzB,MAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,iBAAA,CAAkB,OAAO,CAAA;AACpD,MAAA,MAAM,MAAA,GAAS,MAAA;AAAA,QACb,UAAA,CAAW,MAAM,uCAAuC,CAAA,GAAI,CAAC,CAAA,EAAG,UAAA,CAAW,KAAK,EAAE;AAAA,OACpF;AACA,MAAA,MAAM,KAAA,GAAQ,UAAA,CACX,OAAA,CAAQ,oBAAA,EAAsB,GAAG,CAAA,CACjC,KAAA,CAAM,KAAK,CAAA,CACX,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,SAAS,CAAC,CAAA;AACnC,MAAA,IAAI,OAAO,IAAA,CAAK,OAAA;AAChB,MAAA,IAAI,QAAA,CAAS,KAAK,UAAU,CAAA;AAC1B,QAAA,IAAA,GAAO,IAAA,CAAK,OAAO,CAAC,OAAA,KAAY,UAAU,IAAA,CAAK,OAAA,CAAQ,QAAQ,CAAC,CAAA;AAAA,WAAA,IACzD,OAAA,CAAQ,KAAK,UAAU,CAAA;AAC9B,QAAA,IAAA,GAAO,IAAA,CAAK,OAAO,CAAC,OAAA,KAAY,SAAS,IAAA,CAAK,OAAA,CAAQ,QAAQ,CAAC,CAAA;AAAA,WAAA,IACxD,gCAAA,CAAiC,KAAK,UAAU,CAAA;AACvD,QAAA,IAAA,GAAO,IAAA,CAAK,OAAO,CAAC,OAAA,KAAY,YAAY,IAAA,CAAK,OAAA,CAAQ,QAAQ,CAAC,CAAA;AAAA,WAAA,IAC3D,uCAAA,CAAwC,KAAK,UAAU,CAAA;AAC9D,QAAA,IAAA,GAAO,IAAA,CAAK,OAAO,CAAC,OAAA,KAAY,aAAa,IAAA,CAAK,OAAA,CAAQ,QAAQ,CAAC,CAAA;AACrE,MAAA,MAAM,MAAA,GAAS,IAAA,CACZ,GAAA,CAAI,CAAC,OAAA,KAAY;AAChB,QAAA,MAAM,IAAA,GAAO;AAAA,UACX,OAAA,CAAQ,IAAA;AAAA,UACR,OAAA,CAAQ,QAAA;AAAA,UACR,OAAA,CAAQ,WAAA;AAAA,UACR,OAAA,CAAQ,QAAA;AAAA,UACR,GAAI,OAAA,CAAQ,IAAA,IAAQ,EAAC;AAAA,UACrB,GAAI,OAAA,CAAQ,MAAA,IAAU;AAAC,SACzB,CACG,IAAA,CAAK,GAAG,CAAA,CACR,kBAAkB,OAAO,CAAA;AAC5B,QAAA,IAAI,KAAA,GAAQ,KAAA,CAAM,MAAA,CAAO,CAAC,KAAA,EAAO,IAAA,KAAS,KAAA,IAAS,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,GAAI,CAAA,GAAI,IAAI,CAAC,CAAA;AAClF,QAAA,IAAI,uBAAA,CAAwB,KAAK,UAAU,CAAA,IAAK,SAAS,IAAA,CAAK,IAAI,GAAG,KAAA,IAAS,CAAA;AAC9E,QAAA,IAAI,oBAAoB,IAAA,CAAK,UAAU,CAAA,IAAK,wBAAA,CAAyB,KAAK,IAAI,CAAA;AAC5E,UAAA,KAAA,IAAS,CAAA;AACX,QAAA,IAAI,OAAA,CAAQ,KAAK,UAAU,CAAA,IAAK,QAAQ,IAAA,CAAK,IAAI,GAAG,KAAA,IAAS,CAAA;AAC7D,QAAA,IAAI,MAAA,IAAU,OAAA,CAAQ,KAAA,GAAQ,MAAA,EAAQ,KAAA,IAAS,EAAA;AAC/C,QAAA,OAAO,EAAE,GAAG,OAAA,EAAS,KAAA,EAAM;AAAA,MAC7B,CAAC,CAAA,CACA,MAAA,CAAO,CAAC,OAAA,KAAY,CAAC,MAAA,IAAU,OAAA,CAAQ,KAAA,IAAS,MAAM,CAAA,CACtD,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,KAAA,IAAS,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,KAAK,CAAA,CACrD,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AACb,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,MAAA,CAAO,MAAA,GACT,sLAAA,GACA,8HAAA;AAAA,QACJ,QAAA,EAAU,MAAA,CAAO,GAAA,CAAI,CAAC,OAAA,MAAa;AAAA,UACjC,GAAG,OAAA;AAAA,UACH,MAAA,EAAQ,OAAA,CAAQ,IAAA,CAAK,UAAU,IAC3B,0DAAA,GACA;AAAA,SACN,CAAE,CAAA;AAAA,QACF,YAAA,EAAc,CAAC,yBAAA,EAAwB,wBAAA,EAAuB,6BAAwB;AAAA,OACxF;AAAA,IACF;AAAA,IAEA,aAAa,KAAA,EAAO;AAClB,MAAA,MAAM,OAAA,GAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,qCAAA;AACzD,MAAA,IAAI,cAAA,CAAe,KAAK,OAAO,CAAA;AAC7B,QAAA,OAAO,qKAAA;AACT,MAAA,IAAI,iCAAA,CAAkC,KAAK,OAAO,CAAA;AAChD,QAAA,OAAO,uHAAA;AACT,MAAA,OAAO,oHAAA;AAAA,IACT;AAAA,IAEA,iBAAA,CAAkB,IAAI,IAAA,EAAM;AAC1B,MAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,gBAAA,EAAkB;AACnC,MAAA,MAAM,GAAA,GAAM,OAAO,EAAA,IAAM,IAAA,IAAQ,QAAQ,IAAA,CAAK,WAAA,CAAY,IAAA,GAAO,CAAC,CAAA,CAAE,CAAA;AACpE,MAAA,IAAA,CAAK,YAAY,GAAA,CAAI,GAAA,EAAK,MAAA,CAAO,IAAA,IAAQ,EAAE,CAAC,CAAA;AAC5C,MAAA,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,IAAI,CAAA,IAAK,IAAA,CAAK,MAAA,CAAO,WAAA,EAAa,SAAS,CAAA;AAAA,IACzF;AAAA,IAEA,eAAA,CAAgB,IAAI,IAAA,EAAM;AACxB,MAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,gBAAA,EAAkB;AACnC,MAAA,IAAA,CAAK,YAAY,MAAA,CAAO,MAAA,CAAO,EAAA,IAAM,IAAA,IAAQ,EAAE,CAAC,CAAA;AAChD,MAAA,MAAM,SAAA,GAAY,CAAC,GAAG,IAAA,CAAK,YAAY,MAAA,EAAQ,CAAA,CAAE,EAAA,CAAG,EAAE,CAAA;AACtD,MAAA,IAAI,cAAc,MAAA,EAAW;AAC3B,QAAA,IAAA,CAAK,SAAA;AAAA,UACH,IAAA;AAAA,UACA,KAAK,MAAA,CAAO,UAAA,CAAW,SAAS,CAAA,IAAK,KAAK,MAAA,CAAO,WAAA;AAAA,UACjD;AAAA,SACF;AACA,QAAA;AAAA,MACF;AACA,MAAA,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,CAAK,MAAA,CAAO,cAAc,UAAU,CAAA;AAAA,IAC3D;AAAA,IAEA,SAAA,CAAU,OAAA,EAAS,IAAA,GAAO,EAAA,EAAI,QAAQ,UAAA,EAAY;AAChD,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,SAAS,CAAA;AACjD,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,IAAI,OAAA,IAAW,CAAC,IAAA,CAAK,iBAAA,EAAmB;AACtC,UAAA,IAAA,CAAK,iBAAA,GAAoB,KAAK,GAAA,EAAI;AAClC,UAAA,IAAI,IAAA,CAAK,OAAO,oBAAA,EAAsB;AACpC,YAAA,MAAA,CAAO,aAAA,CAAc,KAAK,aAAa,CAAA;AACvC,YAAA,IAAA,CAAK,gBAAgB,MAAA,CAAO,WAAA,CAAY,MAAM,IAAA,CAAK,qBAAA,IAAyB,GAAK,CAAA;AAAA,UACnF;AAAA,QACF;AACA,QAAA,IAAI,CAAC,OAAA,EAAS;AACZ,UAAA,MAAA,CAAO,aAAA,CAAc,KAAK,aAAa,CAAA;AACvC,UAAA,IAAA,CAAK,aAAA,GAAgB,CAAA;AACrB,UAAA,IAAA,CAAK,iBAAA,GAAoB,CAAA;AAAA,QAC3B;AACA,QAAA,OAAA,CAAQ,SAAS,CAAC,OAAA;AAClB,QAAA,OAAA,CAAQ,SAAA,CAAU,MAAA,CAAO,eAAA,EAAiB,OAAA,IAAW,UAAU,UAAU,CAAA;AACzE,QAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,aAAA,CAAc,IAAI,CAAA;AACxC,QAAA,IAAI,KAAA;AACF,UAAA,KAAA,CAAM,WAAA,GAAc,QAAQ,CAAA,EAAG,IAAA,CAAK,OAAO,aAAa,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA,CAAA;AAClF,QAAA,IAAA,CAAK,qBAAA,EAAsB;AAAA,MAC7B;AACA,MAAA,IAAA,CAAK,MAAA,EAAO;AAAA,IACd;AAAA,IAEA,qBAAA,GAAwB;AACtB,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,cAAc,CAAA;AACtD,MAAA,IAAI,CAAC,OAAA,IAAW,CAAC,IAAA,CAAK,iBAAA,EAAmB;AACzC,MAAA,OAAA,CAAQ,WAAA,GAAc,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,CAAK,KAAA,CAAA,CAAO,IAAA,CAAK,GAAA,EAAI,GAAI,IAAA,CAAK,iBAAA,IAAqB,GAAK,CAAC,CAAC,CAAA,GAAA,CAAA;AAAA,IACjG;AAAA,IAEA,cAAc,KAAA,EAAO;AACnB,MAAA,MAAM,EAAA,GAAK,MAAM,MAAA,EAAQ,SAAA;AACzB,MAAA,MAAA,CAAO,YAAA,CAAa,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,EAAE,CAAC,CAAA;AAC3C,MAAA,IAAA,CAAK,UAAA,CAAW,OAAO,EAAE,CAAA;AACzB,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,CAAA,WAAA,EAAc,GAAA,CAAI,MAAA,CAAO,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA,EAAA,CAAI,CAAA;AAC/E,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAA,CAAO,WAAA,GAAc,KAAK,MAAA,CAAO,KAAA;AACjC,QAAA,MAAA,CAAO,QAAA,GAAW,KAAA;AAAA,MACpB;AAAA,IACF;AAAA,IAEA,WAAW,KAAA,EAAO;AAChB,MAAA,MAAM,EAAA,GAAK,MAAM,MAAA,EAAQ,SAAA;AACzB,MAAA,MAAA,CAAO,YAAA,CAAa,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,EAAE,CAAC,CAAA;AAC3C,MAAA,IAAA,CAAK,UAAA,CAAW,OAAO,EAAE,CAAA;AACzB,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,CAAA,WAAA,EAAc,GAAA,CAAI,MAAA,CAAO,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA,EAAA,CAAI,CAAA;AAC/E,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAA,CAAO,WAAA,GAAc,MAAA,CAAO,OAAA,CAAQ,SAAA,IAAa,KAAK,MAAA,CAAO,UAAA;AAC7D,QAAA,MAAA,CAAO,QAAA,GAAW,KAAA;AAAA,MACpB;AAAA,IACF;AAAA,IAEA,MAAM,cAAA,CAAe,YAAA,EAAc,KAAA,EAAO;AACxC,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,QAAA,CAAS,YAAY,CAAA;AAC1C,MAAA,IAAI,CAAC,OAAA,EAAS,WAAA,IAAe,CAAC,IAAA,CAAK,OAAA,IAAW,CAAC,CAAC,EAAA,EAAI,CAAC,CAAA,CAAE,QAAA,CAAS,KAAK,CAAA,EAAG;AACxE,MAAA,OAAA,CAAQ,QAAA,GAAW,KAAA;AACnB,MAAA,IAAA,CAAK,OAAA,EAAQ;AACb,MAAA,IAAA,CAAK,aAAA,EAAc;AACnB,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,CAAK,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,aAAa,KAAK,CAAA;AAC5D,QAAA,IAAA,CAAK,KAAK,sBAAA,EAAwB,EAAE,aAAa,OAAA,CAAQ,WAAA,EAAa,OAAO,CAAA;AAAA,MAC/E,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,OAAA,CAAQ,QAAA;AACf,QAAA,IAAA,CAAK,OAAA,EAAQ;AACb,QAAA,IAAA,CAAK,aAAA,EAAc;AAAA,MACrB;AAAA,IACF;AAAA,IAEA,aAAA,GAAgB;AACd,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,WAAW,CAAA;AAClD,MAAA,IAAI,CAAC,MAAA,EAAQ;AACb,MAAA,IAAA,CAAK,IAAA,CACF,aAAA,CAAc,eAAe,CAAA,EAC5B,SAAA,CAAU,OAAO,cAAA,EAAgB,IAAA,CAAK,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA;AAC7D,MAAA,MAAA,CAAO,SAAA,GAAY,KAAK,QAAA,CACrB,GAAA;AAAA,QAAI,CAAC,OAAA,EAAS,KAAA,KACb,OAAA,CAAQ,IAAA,KAAS,SACb,CAAA,iCAAA,EAAoC,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAC,CAAA,cAAA,CAAA,GACtD,iGAAiG,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,aAAa,CAAC,CAAA,eAAA,EAAkB,KAAK,OAAA,CAAQ,IAAI,CAAC,CAAA,IAAA,EAAO,IAAA,CAAK,YAAA,CAAa,QAAQ,OAAO,CAAC,CAAA,EAAG,IAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,QAAQ,CAAC,CAAA,EAAG,IAAA,CAAK,YAAA,CAAa,OAAA,CAAQ,WAAW,CAAC,CAAA,EAAG,IAAA,CAAK,WAAA,CAAY,OAAA,CAAQ,YAAY,CAAC,GAAG,IAAA,CAAK,cAAA,CAAe,OAAA,EAAS,KAAK,CAAC,CAAA,gBAAA;AAAA,OAClX,CACC,KAAK,EAAE,CAAA;AACV,MAAA,IAAA,CAAK,IAAA,EAAK;AACV,MAAA,IAAA,CAAK,MAAA,CAAO,KAAK,QAAA,CAAS,EAAA,CAAG,EAAE,CAAA,EAAG,IAAA,KAAS,WAAA,GAAc,SAAA,GAAY,QAAQ,CAAA;AAAA,IAC/E;AAAA,IAEA,aAAA,CAAc,QAAA,GAAW,EAAC,EAAG;AAC3B,MAAA,IAAI,CAAC,QAAA,CAAS,MAAA,EAAQ,OAAO,EAAA;AAC7B,MAAA,MAAM,QAAQ,IAAI,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,OAAO,MAAA,EAAQ;AAAA,QACtD,KAAA,EAAO,UAAA;AAAA,QACP,QAAA,EAAU,KAAK,MAAA,CAAO,QAAA;AAAA,QACtB,qBAAA,EAAuB;AAAA,OACxB,CAAA;AACD,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,MAAA,CAAO,eAAA,KAAoB,SAAA;AAChD,MAAA,MAAM,QAAQ,CAAA,gCAAA,EAAmC,OAAA,GAAU,aAAA,GAAgB,EAAE,KAAK,QAAA,CAC/E,GAAA;AAAA,QACC,CACE,OAAA,KACG,CAAA,8BAAA,EAAiC,OAAA,GAAU,gBAAgB,EAAE,CAAA,EAAG,SAAA,CAAU,OAAA,CAAQ,IAAI,CAAA,CAAE,MAAA,GAAS,EAAA,GAAK,oBAAoB,EAAE,CAAA;AAAA,QAAA,EAEjI,OAAA,CAAQ,OAAA,KAAY,KAAA,GAChB,CAAA,yDAAA,EAA4D,KAAK,OAAA,CAAQ,IAAI,CAAC,CAAA,+BAAA,EAAkC,KAAK,QAAA,CAAS,OAAA,CAAQ,QAAQ,CAAC,CAAC,CAAA,uBAAA,EAA0B,YAAA,CAAa,OAAA,CAAQ,SAAS,KAAK,QAAQ,CAAA,iBAAA,EAAoB,MAAA,CAAO,SAAA,CAAU,QAAQ,SAAS,CAAA,GAAI,WAAA,GAAc,OAAO,aACpS,CAAA,iFAAA,EAAoF,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAC,CAAA,mBAAA,EAAsB,IAAA,CAAK,OAAA,CAAQ,EAAE,CAAC,CAAA,cAAA,EAAiB,IAAA,CAAK,CAAA,EAAG,QAAQ,IAAI,CAAA,CAAA,EAAI,OAAA,CAAQ,SAAA,IAAa,KAAK,MAAA,CAAO,IAAI,CAAA,CAAE,CAAC,kCAAkC,IAAA,CAAK,QAAA,CAAS,OAAA,CAAQ,QAAQ,CAAC,CAAC,CAAA,uBAAA,EAA0B,YAAA,CAAa,OAAA,CAAQ,SAAS,CAAA,IAAK,QAAQ,CAAA,iBAAA,EAAoB,MAAA,CAAO,UAAU,OAAA,CAAQ,SAAS,CAAA,GAAI,WAAA,GAAc,OAAO,CAAA,WAAA,CACzb;AAAA,QAAA,EACE,OAAA,IAAW,OAAA,CAAQ,MAAA,KAAW,KAAA,IAAS,OAAA,CAAQ,OAAA,KAAY,KAAA,GAAQ,CAAA,yEAAA,EAA4E,IAAA,CAAK,OAAA,CAAQ,EAAE,CAAC,CAAA,cAAA,EAAiB,KAAK,CAAA,EAAG,OAAA,CAAQ,IAAI,CAAA,CAAA,EAAI,OAAA,CAAQ,QAAA,IAAY,IAAA,CAAK,MAAA,CAAO,GAAG,CAAA,CAAE,CAAC,CAAA,iBAAA,CAAA,GAAiB,EAAE;AAAA,gDAAA,EACzN,IAAA,CAAK,OAAA,CAAQ,QAAQ,CAAC,CAAA,YAAA,EAAe,OAAA,CAAQ,OAAA,KAAY,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA,GAAI,CAAA,uDAAA,EAA0D,KAAK,OAAA,CAAQ,IAAI,CAAC,CAAA,mBAAA,EAAsB,IAAA,CAAK,OAAA,CAAQ,EAAE,CAAC,CAAA,EAAA,EAAK,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAC,CAAA,SAAA,CAAW,2BAA2B,OAAA,CAAQ,SAAA,GAAY,OAAA,CAAQ,KAAA,GAAQ,CAAA,KAAA,EAAQ,KAAA,CAAM,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,IAAK,CAAC,CAAC,CAAA,MAAA,CAAA,GAAW,EAAE,CAAA,QAAA,EAAW,KAAA,CAAM,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,IAAK,CAAC,CAAC,CAAA,kBAAA,EAAqB,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAC,CAAA;AAAA,QAAA,EAE9e,CAAC,OAAA,KAAY,OAAA,CAAQ,OAAO,MAAA,IAAU,OAAA,CAAQ,QAAQ,MAAA,CAAA,GAClD,CAAA;AAAA,UAAA,EACF,OAAA,CAAQ,KAAA,EAAO,MAAA,KAAW,CAAA,GAAI,CAAA,aAAA,EAAgB,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,IAAI,CAAC,CAAA,sCAAA,EAAyC,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAC,CAAC,CAAA,iBAAA,CAAA,GAAsB,OAAA,CAAQ,KAAA,EAAO,MAAA,GAAS,CAAA,aAAA,EAAgB,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,IAAI,CAAC,CAAA,oDAAA,EAAuD,IAAA,CAAK,QAAQ,EAAE,CAAC,CAAA,EAAA,EAAK,OAAA,CAAQ,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,CAAA,eAAA,EAAkB,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,EAAI,IAAA,KAAS,OAAA,CAAQ,YAAA,GAAe,WAAA,GAAc,EAAE,CAAA,CAAA,EAAI,IAAA,CAAK,IAAI,CAAC,CAAA,SAAA,CAAW,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA,iBAAA,CAAA,GAAsB,EAAE;AAAA,UAAA,EAC1c,OAAA,CAAQ,MAAA,EAAQ,MAAA,KAAW,CAAA,GAAI,CAAA,aAAA,EAAgB,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,KAAK,CAAC,CAAA,sCAAA,EAAyC,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA,iBAAA,CAAA,GAAsB,OAAA,CAAQ,MAAA,EAAQ,MAAA,GAAU,IAAA,CAAK,MAAA,CAAO,WAAA,KAAgB,UAAA,GAAa,CAAA,kCAAA,EAAqC,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,KAAK,CAAC,CAAA,mCAAA,EAAmC,IAAA,CAAK,OAAA,CAAQ,aAAA,IAAiB,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA,sEAAA,EAAyE,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,KAAK,CAAC,CAAA,EAAA,EAAK,OAAA,CAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,CAAA,wCAAA,EAA2C,IAAA,CAAK,KAAK,CAAC,CAAA,mBAAA,EAAsB,IAAA,CAAK,OAAA,CAAQ,EAAE,CAAC,CAAA,cAAA,EAAiB,IAAA,CAAK,KAAK,CAAC,CAAA,gBAAA,EAAmB,KAAA,MAAW,OAAA,CAAQ,aAAA,IAAiB,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,CAAE,CAAA,kBAAA,EAAqB,WAAA,CAAY,KAAK,CAAC,CAAA,WAAA,CAAa,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA,eAAA,CAAA,GAAoB,CAAA,aAAA,EAAgB,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,KAAK,CAAC,CAAA,qDAAA,EAAwD,IAAA,CAAK,QAAQ,EAAE,CAAC,CAAA,EAAA,EAAK,OAAA,CAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,CAAA,eAAA,EAAkB,IAAA,CAAK,KAAK,CAAC,CAAA,CAAA,EAAI,KAAA,KAAU,OAAA,CAAQ,aAAA,GAAgB,WAAA,GAAc,EAAE,CAAA,CAAA,EAAI,IAAA,CAAK,KAAK,CAAC,CAAA,SAAA,CAAW,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA,iBAAA,CAAA,GAAuB,EAAE;AAAA,UAAA,EACtiC,IAAA,CAAK,MAAA,CAAO,YAAA,GAAe,CAAA,aAAA,EAAgB,KAAK,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAC,2DAA2D,IAAA,CAAK,OAAA,CAAQ,EAAE,CAAC,8EAA8E,EAAE;AAAA,cAAA,CAAA,GAE9N,EACN;AAAA,QAAA,EAEE,UACI,EAAA,GACA,CAAA;AAAA,UAAA,EACF,OAAA,CAAQ,YAAY,KAAA,GAAQ,EAAA,GAAK,iDAAiD,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAC,CAAA,mBAAA,EAAsB,IAAA,CAAK,QAAQ,EAAE,CAAC,KAAK,IAAA,CAAK,OAAA,CAAQ,aAAa,IAAA,CAAK,MAAA,CAAO,IAAI,CAAC,CAAA,SAAA,CAAW;AAAA,UAAA,EACrM,OAAA,CAAQ,WAAW,KAAA,IAAS,OAAA,CAAQ,YAAY,KAAA,GAAQ,EAAA,GAAK,+CAA+C,IAAA,CAAK,OAAA,CAAQ,EAAE,CAAC,CAAA,EAAA,EAAK,KAAK,OAAA,CAAQ,QAAA,IAAY,KAAK,MAAA,CAAO,GAAG,CAAC,CAAA,SAAA,CAAW;AAAA,cAAA,CAEzL;AAAA,gBAAA;AAAA,OAEA,CACC,IAAA,CAAK,EAAE,CAAC,CAAA,MAAA,CAAA;AACX,MAAA,IAAI,CAAC,OAAA,IAAW,QAAA,CAAS,MAAA,GAAS,GAAG,OAAO,KAAA;AAC5C,MAAA,OAAO,yCAAyC,KAAK,CAAA,yDAAA,EAA4D,KAAK,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAC,CAAA,4DAAA,EAA+D,KAAK,IAAA,CAAK,MAAA,CAAO,gBAAgB,CAAC,CAAA,0EAAA,EAAwE,KAAK,IAAA,CAAK,MAAA,CAAO,YAAY,CAAC,CAAA,6BAAA,CAAA;AAAA,IACpV;AAAA,IAEA,YAAA,CAAa,KAAA,GAAQ,EAAC,EAAG;AACvB,MAAA,OAAO,KAAA,CAAM,MAAA,GACT,CAAA,0BAAA,EAA6B,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,CAAA,4DAAA,EAA+D,IAAA,CAAK,IAAA,CAAK,IAAA,KAAS,gBAAA,GAAmB,IAAA,CAAK,MAAA,CAAO,QAAA,GAAW,IAAA,CAAK,MAAA,CAAO,KAAK,CAAC,CAAA,YAAA,EAAe,IAAA,CAAK,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,YAAA,IAAgB,IAAA,CAAK,EAAE,CAAC,CAAA,QAAA,EAAW,IAAA,CAAK,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,MAAA,IAAU,EAAE,CAAC,CAAA,IAAA,EAAO,IAAA,CAAK,aAAA,GAAgB,CAAA,QAAA,EAAW,IAAA,CAAK,IAAA,CAAK,aAAa,CAAC,CAAA,SAAA,CAAA,GAAc,EAAE,CAAA,EAAG,IAAA,CAAK,kBAAA,GAAqB,CAAA,MAAA,EAAS,IAAA,CAAK,IAAA,CAAK,kBAAkB,CAAC,CAAA,OAAA,CAAA,GAAY,EAAE,CAAA,UAAA,CAAY,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA,MAAA,CAAA,GACte,EAAA;AAAA,IACN;AAAA,IAEA,YAAA,CAAa,OAAA,GAAU,EAAC,EAAG;AACzB,MAAA,OAAO,OAAA,CAAQ,MAAA,GACX,CAAA,6BAAA,EAAgC,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,KAAW,CAAA,yCAAA,EAA4C,IAAA,CAAK,MAAA,CAAO,GAAG,CAAC,CAAA,6DAAA,EAAgE,IAAA,CAAK,MAAA,CAAO,GAAG,CAAC,CAAA,EAAA,EAAK,IAAA,CAAK,MAAA,CAAO,KAAK,CAAC,CAAA,2CAAA,CAAwC,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA,MAAA,CAAA,GAC7Q,EAAA;AAAA,IACN;AAAA,IAEA,WAAA,CAAY,KAAA,GAAQ,EAAC,EAAG;AACtB,MAAA,OAAO,MAAM,MAAA,GACT,CAAA,mBAAA,EAAsB,KAAA,CACnB,GAAA,CAAI,CAAC,IAAA,KAAS;AACb,QAAA,MAAM,KAAA,GAAQ,OAAO,IAAA,KAAS,QAAA,GAAW,OAAO,IAAA,EAAM,KAAA;AACtD,QAAA,MAAM,KAAA,GAAQ,OAAO,IAAA,KAAS,QAAA,GAAW,OAAO,IAAA,EAAM,KAAA;AACtD,QAAA,OAAO,KAAA,IAAS,KAAA,GACZ,CAAA,kCAAA,EAAqC,IAAA,CAAK,KAAK,CAAC,CAAA,EAAA,EAAK,IAAA,CAAK,KAAK,CAAC,CAAA,SAAA,CAAA,GAChE,EAAA;AAAA,MACN,CAAC,CAAA,CACA,IAAA,CAAK,EAAE,CAAC,CAAA,MAAA,CAAA,GACX,EAAA;AAAA,IACN;AAAA,IAEA,cAAA,CAAe,SAAS,KAAA,EAAO;AAC7B,MAAA,IAAI,CAAC,OAAA,CAAQ,WAAA,IAAe,CAAC,IAAA,CAAK,YAAY,OAAO,EAAA;AACrD,MAAA,OAAO,CAAA,kCAAA,EAAqC,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAC,CAAA;AAAA,cAAA,EAC5D,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAC,CAAA;AAAA,oEAAA,EAC4B,KAAK,CAAA,cAAA,EAAiB,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,OAAO,CAAC,CAAA,gBAAA,EAAmB,OAAA,CAAQ,QAAA,KAAa,CAAC,CAAA,EAAA,EAAK,aAAa,CAAA;AAAA,qEAAA,EACzG,KAAK,CAAA,cAAA,EAAiB,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,UAAU,CAAC,CAAA,gBAAA,EAAmB,OAAA,CAAQ,QAAA,KAAa,EAAE,CAAA,EAAA,EAAK,eAAe,CAAA;AAAA,YAAA,CAAA;AAAA,IAEnL;AAAA,IAEA,MAAA,CAAO,SAAS,QAAA,EAAU;AACxB,MAAA,qBAAA,CAAsB,MAAM;AAC1B,QAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,eAAe,CAAA;AACpD,QAAA,IAAI,CAAC,IAAA,EAAM;AACX,QAAA,IAAI,WAAW,SAAA,EAAW;AACxB,UAAA,MAAM,OAAA,GAAU,IAAA,CAAK,aAAA,CAAc,+BAA+B,CAAA;AAClE,UAAA,IAAA,CAAK,SAAA,GAAY,UAAU,IAAA,CAAK,GAAA,CAAI,GAAG,OAAA,CAAQ,SAAA,GAAY,CAAC,CAAA,GAAI,IAAA,CAAK,YAAA;AACrE,UAAA;AAAA,QACF;AACA,QAAA,IAAA,CAAK,YAAY,IAAA,CAAK,YAAA;AAAA,MACxB,CAAC,CAAA;AAAA,IACH;AAAA,IAEA,aAAA,GAAgB;AACd,MAAA,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA;AAAA,IAwPT;AAAA,IAEA,OAAO,MAAA,EAAQ;AACb,MAAA,OAAO,CAAA,uCAAA,EAA0C,IAAA,CAAK,MAAM,CAAC,CAAA,k7OAAA,CAAA;AAAA,IAC/D;AAAA;AAGF,EAAA,cAAA,CAAe,MAAA,CAAO,KAAK,wBAAwB,CAAA;AACrD,CAAA,GAAG","file":"chunk-F3TYGM2R.cjs","sourcesContent":["/* global CSS, CustomEvent, HTMLElement, URL, customElements, document, fetch, localStorage, location, navigator, queueMicrotask, requestAnimationFrame, sessionStorage, window */\nimport { createBrowserChatRuntime } from \"../browser/runtime\";\nimport { normalizeChatUI } from \"../ui/protocol\";\n\n(() => {\n  if (typeof window === \"undefined\" || typeof customElements === \"undefined\") return;\n\n  const TAG = \"promptrails-shop-assistant\";\n  if (customElements.get(TAG)) return;\n\n  const DEFAULT_SESSION_MAX_AGE_SECONDS = 24 * 60 * 60;\n  const MAX_SESSION_MAX_AGE_SECONDS = 30 * 24 * 60 * 60;\n  const DEFAULT_CONSENT_MAX_AGE_DAYS = 180;\n  const MAX_CONSENT_MAX_AGE_DAYS = 365;\n  const CHAT_ICON =\n    '<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5 5h14v10H9l-4 4V5Z\"/></svg>';\n  const THUMB_UP_ICON =\n    '<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M7 10v10H3V10h4Zm0 9h10.2a2 2 0 0 0 1.9-1.4l1.5-5A2 2 0 0 0 18.7 10H14l.7-3.4A2.2 2.2 0 0 0 12.5 4L7 10v9Z\"/></svg>';\n  const THUMB_DOWN_ICON =\n    '<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M7 14V4H3v10h4Zm0-9h10.2a2 2 0 0 1 1.9 1.4l1.5 5a2 2 0 0 1-1.9 2.6H14l.7 3.4a2.2 2.2 0 0 1-2.2 2.6L7 14V5Z\"/></svg>';\n  const slotPosition = [\n    \"0 0\",\n    \"33.333% 0\",\n    \"66.666% 0\",\n    \"100% 0\",\n    \"0 100%\",\n    \"33.333% 100%\",\n    \"66.666% 100%\",\n    \"100% 100%\",\n  ];\n  const safe = (value) =>\n    String(value ?? \"\").replace(\n      /[&<>'\"]/g,\n      (character) =>\n        ({ \"&\": \"&amp;\", \"<\": \"&lt;\", \">\": \"&gt;\", \"'\": \"&#39;\", '\"': \"&quot;\" })[character],\n    );\n  const cleanBase = (value) =>\n    String(value ?? \"\")\n      .trim()\n      .replace(/\\/+$/, \"\");\n  const plainText = (value) =>\n    String(value ?? \"\")\n      .replace(/<[^>]*>/g, \" \")\n      .replace(/\\s+/g, \" \")\n      .trim();\n  const visibleUserText = (value) => {\n    const raw = String(value ?? \"\");\n    const customerMessage = raw.match(\n      /(?:^|\\n)<MUSTERI_MESAJI>\\s*\\n?([\\s\\S]*?)\\n?<\\/MUSTERI_MESAJI>(?:\\n|$)/,\n    );\n    return plainText(customerMessage?.[1] ?? raw);\n  };\n  const mediaUrl = (value) => {\n    try {\n      const parsed = new URL(String(value ?? \"\").trim(), location.href);\n      return parsed.protocol === \"https:\" || parsed.protocol === \"http:\" ? parsed.href : \"\";\n    } catch {\n      return \"\";\n    }\n  };\n  const stringList = (value, fallback) => {\n    if (!value) return fallback;\n    try {\n      const parsed = JSON.parse(value);\n      return Array.isArray(parsed) ? parsed.map(plainText).filter(Boolean).slice(0, 5) : fallback;\n    } catch {\n      return value.split(\"|\").map(plainText).filter(Boolean).slice(0, 5);\n    }\n  };\n  const stringMap = (value) => {\n    try {\n      const parsed = JSON.parse(value || \"{}\");\n      if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) return {};\n      return Object.fromEntries(\n        Object.entries(parsed)\n          .slice(0, 50)\n          .map(([key, label]) => [plainText(key).slice(0, 120), plainText(label).slice(0, 120)])\n          .filter(([key, label]) => key && label),\n      );\n    } catch {\n      return {};\n    }\n  };\n  const stylesheetUrl = (value) => {\n    const candidate = String(value ?? \"\").trim();\n    return /^(https?:\\/\\/|\\/|\\.\\.\\/|\\.\\/)/.test(candidate) ? candidate : \"\";\n  };\n  const boundedText = (value, maxLength = 500) => plainText(value).slice(0, maxLength);\n  const actionOrigins = (value) =>\n    stringList(value, [])\n      .map((entry) => {\n        try {\n          const parsed = new URL(entry, location.href);\n          return parsed.protocol === \"https:\" || parsed.protocol === \"http:\" ? parsed.origin : \"\";\n        } catch {\n          return \"\";\n        }\n      })\n      .filter(Boolean);\n  const allowedActionUrl = (value, allowedOrigins = []) => {\n    try {\n      const parsed = new URL(String(value ?? \"\").trim(), location.href);\n      const developmentHttp =\n        parsed.protocol === \"http:\" &&\n        [\"localhost\", \"127.0.0.1\", \"[::1]\"].includes(parsed.hostname);\n      if (parsed.protocol !== \"https:\" && !developmentHttp) return \"\";\n      if (parsed.origin !== location.origin && !allowedOrigins.includes(parsed.origin)) return \"\";\n      return parsed.href;\n    } catch {\n      return \"\";\n    }\n  };\n  const actionLabel = (url, fallback, labels) => {\n    const custom = boundedText(fallback, 80);\n    if (custom) return custom;\n    try {\n      const hostname = new URL(url).hostname.toLowerCase();\n      if (hostname === \"api.whatsapp.com\" || hostname === \"wa.me\") return labels.whatsapp;\n    } catch {\n      /* invalid URLs are filtered before labels are derived */\n    }\n    return labels.openLink;\n  };\n  const extractTextActions = (value, allowedOrigins, labels) => {\n    let message = String(value ?? \"\");\n    const actions = [];\n    for (const match of message.matchAll(/https?:\\/\\/[^\\s<>\"']+/gi)) {\n      const raw = match[0];\n      const candidate = raw.replace(/[),.;!?]+$/, \"\");\n      const url = allowedActionUrl(candidate, allowedOrigins);\n      if (!url || actions.some((action) => action.url === url)) continue;\n      actions.push({ url, label: actionLabel(url, \"\", labels) });\n      message = message.replace(raw, \" \");\n      if (actions.length === 3) break;\n    }\n    return { text: plainText(message), actions };\n  };\n  const uniqueText = (values, maxItems = 20) =>\n    [\n      ...new Set(\n        (Array.isArray(values) ? values : [])\n          .map((value) => boundedText(value, 120))\n          .filter(Boolean),\n      ),\n    ].slice(0, maxItems);\n  const finiteNumber = (...values) => {\n    for (const value of values) {\n      const number = Number(value);\n      if (Number.isFinite(number) && number >= 0) return number;\n    }\n    return 0;\n  };\n  const firstDefined = (...values) =>\n    values.find((value) => value !== undefined && value !== null && value !== \"\");\n  const availability = (value) => {\n    if (typeof value === \"boolean\") return value;\n    if (typeof value === \"number\") return value > 0;\n    const normalized = plainText(value).toLocaleLowerCase(\"tr-TR\");\n    if (\n      [\n        \"false\",\n        \"0\",\n        \"no\",\n        \"hayır\",\n        \"hayir\",\n        \"out_of_stock\",\n        \"out of stock\",\n        \"stokta yok\",\n        \"sold_out\",\n        \"sold out\",\n      ].includes(normalized)\n    )\n      return false;\n    if (\n      [\"true\", \"1\", \"yes\", \"evet\", \"in_stock\", \"in stock\", \"stokta\", \"available\"].includes(\n        normalized,\n      )\n    )\n      return true;\n    return undefined;\n  };\n  const colorSwatch = (value) => {\n    const color = boundedText(value, 40).toLocaleLowerCase(\"tr-TR\");\n    const palette = {\n      siyah: \"#111111\",\n      black: \"#111111\",\n      beyaz: \"#ffffff\",\n      white: \"#ffffff\",\n      ekru: \"#f3eee2\",\n      krem: \"#eee5d5\",\n      cream: \"#eee5d5\",\n      bej: \"#d8c3a5\",\n      beige: \"#d8c3a5\",\n      bordo: \"#6d1f2a\",\n      burgundy: \"#6d1f2a\",\n      kırmızı: \"#b3262d\",\n      red: \"#b3262d\",\n      lacivert: \"#17213c\",\n      navy: \"#17213c\",\n      mavi: \"#315b89\",\n      blue: \"#315b89\",\n      yeşil: \"#48624b\",\n      green: \"#48624b\",\n      haki: \"#656947\",\n      khaki: \"#656947\",\n      gri: \"#8b8b88\",\n      gray: \"#8b8b88\",\n      grey: \"#8b8b88\",\n      kahverengi: \"#694d3a\",\n      brown: \"#694d3a\",\n      camel: \"#b98c5d\",\n      pembe: \"#d89aaa\",\n      pink: \"#d89aaa\",\n      mor: \"#74557d\",\n      purple: \"#74557d\",\n      turuncu: \"#c96a32\",\n      orange: \"#c96a32\",\n      sarı: \"#d7b642\",\n      yellow: \"#d7b642\",\n      altın: \"#b99a4a\",\n      gold: \"#b99a4a\",\n      gümüş: \"#b8babd\",\n      silver: \"#b8babd\",\n    };\n    return /^#[\\da-f]{3,8}$/i.test(color) ? color : palette[color] || \"#c9c5bd\";\n  };\n  const firstImageUrl = (value) => {\n    const images = Array.isArray(value) ? value : value ? [value] : [];\n    for (const image of images) {\n      const candidate =\n        typeof image === \"string\" ? image : (image?.url ?? image?.src ?? image?.image_url);\n      const normalized = mediaUrl(candidate);\n      if (normalized) return normalized;\n    }\n    return \"\";\n  };\n  const responseProduct = (entry) => {\n    if (!entry || typeof entry !== \"object\" || Array.isArray(entry)) return null;\n    const attributes =\n      entry.attributes && typeof entry.attributes === \"object\" && !Array.isArray(entry.attributes)\n        ? { ...entry, ...entry.attributes }\n        : entry;\n    const id = boundedText(attributes.id ?? attributes.product_id ?? attributes.urun_id, 160);\n    const name = boundedText(\n      attributes.name ?? attributes.title ?? attributes.product_name ?? attributes.urun_adi,\n      240,\n    );\n    if (!id || !name) return null;\n    const categoryValue = attributes.category ?? attributes.kategori;\n    const category = boundedText(\n      typeof categoryValue === \"object\"\n        ? (categoryValue?.name ?? categoryValue?.title)\n        : categoryValue,\n      160,\n    );\n    const priceValue = attributes.price ?? attributes.fiyat;\n    const price = finiteNumber(\n      typeof priceValue === \"object\" ? priceValue?.min : priceValue,\n      priceValue?.amount,\n      priceValue?.value,\n      attributes.sale_price,\n    );\n    const variants = (Array.isArray(attributes.variants) ? attributes.variants : []).map(\n      (variant) => {\n        const stockValue = firstDefined(\n          variant?.stock,\n          variant?.stock_quantity,\n          variant?.stockQuantity,\n          variant?.inventory_quantity,\n          variant?.inventoryQuantity,\n        );\n        const availableValue = firstDefined(\n          variant?.available,\n          variant?.is_available,\n          variant?.isAvailable,\n          variant?.in_stock,\n          variant?.inStock,\n        );\n        const stockAvailability = stockValue === undefined ? undefined : Number(stockValue) > 0;\n        return {\n          id: boundedText(variant?.id ?? variant?.variant_id ?? variant?.variantId, 160),\n          size: boundedText(variant?.size, 120),\n          color: boundedText(variant?.color, 120),\n          available: availability(availableValue) ?? stockAvailability ?? true,\n          stockKnown: availableValue !== undefined || stockValue !== undefined,\n        };\n      },\n    );\n    const availableVariants = variants.filter((variant) => variant.available);\n    const optionVariants = availableVariants.length ? availableVariants : variants;\n    const sizes = uniqueText(\n      variants.length\n        ? optionVariants.map((variant) => variant.size)\n        : Array.isArray(attributes.sizes)\n          ? attributes.sizes\n          : [],\n    );\n    const colors = uniqueText(\n      variants.length\n        ? optionVariants.map((variant) => variant.color)\n        : Array.isArray(attributes.colors)\n          ? attributes.colors\n          : [],\n    );\n    const requestedSize = boundedText(attributes.selected_size ?? attributes.selectedSize, 120);\n    const requestedColor = boundedText(attributes.selected_color ?? attributes.selectedColor, 120);\n    const selectedSize = sizes.includes(requestedSize) ? requestedSize : \"\";\n    const selectedColor = colors.includes(requestedColor) ? requestedColor : \"\";\n    const variantId = boundedText(\n      attributes.selected_variant_id ??\n        attributes.selectedVariantId ??\n        attributes.variant_id ??\n        attributes.variantId,\n      160,\n    );\n    const selectedVariant = availableVariants.find((variant) => {\n      const candidateID = variant.id;\n      if (variantId && candidateID === variantId) return true;\n      const sizeMatches = !selectedSize || variant.size === selectedSize;\n      const colorMatches = !selectedColor || variant.color === selectedColor;\n      return sizeMatches && colorMatches;\n    });\n    const productAvailability = availability(\n      firstDefined(\n        attributes.available,\n        attributes.is_available,\n        attributes.isAvailable,\n        attributes.in_stock,\n        attributes.inStock,\n        attributes.status,\n      ),\n    );\n    const productStock = firstDefined(\n      attributes.stock,\n      attributes.stock_quantity,\n      attributes.stockQuantity,\n      attributes.inventory_quantity,\n      attributes.inventoryQuantity,\n    );\n    const inStock =\n      productAvailability !== false &&\n      (productStock === undefined || Number(productStock) > 0) &&\n      (!variants.length || availableVariants.length > 0);\n    const stockKnown =\n      productAvailability !== undefined ||\n      productStock !== undefined ||\n      selectedVariant?.stockKnown === true;\n    const compareAtValue =\n      attributes.compare_at_price ??\n      attributes.compareAtPrice ??\n      attributes.compare_at ??\n      attributes.compareAt ??\n      attributes.original_price ??\n      attributes.originalPrice ??\n      attributes.list_price ??\n      attributes.listPrice;\n    const variantCompareAt =\n      selectedVariant?.price?.compare_at ??\n      selectedVariant?.price?.compareAt ??\n      selectedVariant?.compare_at ??\n      selectedVariant?.compareAt;\n    const compareAt = finiteNumber(\n      typeof compareAtValue === \"object\" ? compareAtValue?.min : compareAtValue,\n      compareAtValue?.amount,\n      compareAtValue?.value,\n      variantCompareAt,\n    );\n    const url = mediaUrl(attributes.url ?? attributes.product_url ?? attributes.link);\n    return {\n      id,\n      slug: boundedText(attributes.slug, 200) || id,\n      url,\n      name,\n      category,\n      description: boundedText(attributes.description ?? attributes.aciklama, 800),\n      price,\n      compareAt: compareAt > price ? compareAt : 0,\n      imageUrl: firstImageUrl(\n        attributes.imageUrl ?? attributes.image_url ?? attributes.image ?? attributes.images,\n      ),\n      sizes,\n      colors,\n      selectedSize,\n      selectedColor,\n      variantId:\n        selectedVariant?.id ||\n        (variants.some((variant) => variant.id) ? availableVariants[0]?.id || \"\" : variantId),\n      selectedVariantIdProvided: Boolean(variantId),\n      variants,\n      inStock,\n      stockKnown,\n    };\n  };\n\n  class PromptRailsShopAssistant extends HTMLElement {\n    static get observedAttributes() {\n      return [\n        \"api-url\",\n        \"workspace-id\",\n        \"agent-id\",\n        \"api-key\",\n        \"catalog-url\",\n        \"product-source\",\n        \"product-card-mode\",\n        \"brand\",\n        \"assistant-name\",\n        \"assistant-mark\",\n        \"launcher-title\",\n        \"launcher-subtitle\",\n        \"launcher-icon\",\n        \"show-launcher-mark\",\n        \"show-launcher-subtitle\",\n        \"greeting\",\n        \"greeting-mode\",\n        \"placeholder\",\n        \"quick-prompts\",\n        \"accent-color\",\n        \"currency\",\n        \"locale\",\n        \"stylesheet-url\",\n        \"theme-css\",\n        \"style-nonce\",\n        \"persist-session\",\n        \"session-max-age\",\n        \"visitor-tracking\",\n        \"visitor-max-age\",\n        \"implicit-cart-action\",\n        \"show-tool-activity\",\n        \"show-activity-duration\",\n        \"show-quantity\",\n        \"color-picker\",\n        \"tool-labels\",\n        \"allowed-action-origins\",\n        \"close-on-product-view\",\n        \"legal-notice\",\n        \"legal-url\",\n        \"legal-link-label\",\n        \"legal-accept-label\",\n        \"legal-consent-required\",\n        \"legal-consent-version\",\n        \"legal-consent-max-age\",\n        \"ai-disclaimer\",\n        \"translations\",\n      ];\n    }\n\n    constructor() {\n      super();\n      this.root = this.attachShadow({ mode: \"open\" });\n      this.catalog = [];\n      this.messages = [];\n      this.runtime = null;\n      this.context = {};\n      this.hydrationPromise = Promise.resolve();\n      this.opened = false;\n      this.busy = false;\n      this.ready = false;\n      this.activeTools = new Map();\n      this.cartTimers = new Map();\n      this.cartDrawerProductId = \"\";\n      this.cartDrawerTrigger = null;\n      this.activityStartedAt = 0;\n      this.activityTimer = 0;\n      this.runtimeRebuildQueued = false;\n      // Whether connectedCallback has finished its first pass. An upgrade\n      // replays every attribute before it runs, so this is what separates\n      // \"the element is still being set up\" from \"the host configured it\n      // later\" — two orders that need opposite answers in queueRuntimeRebuild.\n      this.connectedOnce = false;\n      this.onWindowKey = (event) => this.handleWindowKey(event);\n      this.onCartConfirmed = (event) => this.cartConfirmed(event);\n      this.onCartFailed = (event) => this.cartFailed(event);\n      this.onConnectivity = () => {\n        const offline = this.root.querySelector(\".offline\");\n        if (offline) offline.hidden = navigator.onLine;\n      };\n    }\n\n    connectedCallback() {\n      this.createRuntime();\n      this.renderShell();\n      this.bind();\n      this.restore();\n      this.hydrationPromise = this.hydrateSession();\n      (this.config.productSource === \"response\" ? Promise.resolve() : this.loadCatalog()).finally(\n        () => {\n          this.ready = true;\n        },\n      );\n      window.addEventListener(\"keydown\", this.onWindowKey);\n      window.addEventListener(\"promptrails:cart-confirmed\", this.onCartConfirmed);\n      window.addEventListener(\"promptrails:cart-failed\", this.onCartFailed);\n      window.addEventListener(\"online\", this.onConnectivity);\n      window.addEventListener(\"offline\", this.onConnectivity);\n      // Last, so anything above that happens to touch an attribute is still\n      // treated as part of this first pass and does not queue a second build.\n      this.connectedOnce = true;\n    }\n\n    disconnectedCallback() {\n      this.setPageScrollLocked(false);\n      window.removeEventListener(\"keydown\", this.onWindowKey);\n      window.removeEventListener(\"promptrails:cart-confirmed\", this.onCartConfirmed);\n      window.removeEventListener(\"promptrails:cart-failed\", this.onCartFailed);\n      window.removeEventListener(\"online\", this.onConnectivity);\n      window.removeEventListener(\"offline\", this.onConnectivity);\n      this.cartTimers.forEach((timer) => window.clearTimeout(timer));\n      this.cartTimers.clear();\n      window.clearInterval(this.activityTimer);\n      if (typeof this.runtime?.disconnect === \"function\") this.runtime.disconnect();\n    }\n\n    /*\n     * Attributes that identify the backend. Changing one has to rebuild the\n     * runtime, because the old one is bound to the previous key/agent/session\n     * policy. Changing anything else is presentation and only re-renders.\n     */\n    static RUNTIME_ATTRIBUTES = new Set([\n      \"api-url\",\n      \"workspace-id\",\n      \"agent-id\",\n      \"api-key\",\n      \"persist-session\",\n      \"session-max-age\",\n      \"visitor-tracking\",\n      \"visitor-max-age\",\n    ]);\n\n    attributeChangedCallback(name, oldValue, newValue) {\n      if (!this.isConnected) return;\n      // Setting an attribute to the value it already holds is not a change.\n      // This callback used to ignore both values and rebuild regardless, so a\n      // host re-applying its configuration — which is the ordinary way to\n      // re-run an embed script — tore down a live runtime and fetched a new\n      // token for nothing.\n      if (oldValue === newValue) return;\n      if (PromptRailsShopAssistant.RUNTIME_ATTRIBUTES.has(name)) this.queueRuntimeRebuild();\n      this.renderShell();\n    }\n\n    /*\n     * One rebuild per batch of attribute writes.\n     *\n     * A host configures this element by setting attributes one after another,\n     * and eight of them are runtime-affecting. Rebuilding inside the callback\n     * meant eight teardowns and eight `POST /browser/chat/token` calls in the\n     * same tick — observed in production as six identical token requests\n     * within one millisecond, which then tripped the per-visitor rate limit\n     * and 429'd the visitor's own messages.\n     *\n     * Deferring to a microtask lets the whole batch land first, so the\n     * runtime is rebuilt once with the final configuration. Also re-checks\n     * `isConnected`: the element may have been removed while queued.\n     */\n    queueRuntimeRebuild() {\n      /*\n       * Nothing to do before the first pass. Upgrading an element the page\n       * already put in the DOM replays attributeChangedCallback for every\n       * observed attribute — eight of them runtime-affecting, each a genuine\n       * null -> value change — and only THEN calls connectedCallback. Queueing\n       * there meant connectedCallback built the runtime and the queued task\n       * immediately built a second one, which is the two-token page load this\n       * was supposed to end.\n       *\n       * This used to test `!this.runtime`, which reads the same for an upgrade\n       * and the opposite for a host that configures the element AFTER mounting\n       * it. That order is not hypothetical: it is how an embed hands over a\n       * credential it fetches late, so a page view that never opens the\n       * assistant never asks for one. Such an element mounted unconfigured,\n       * built nothing, and then — key in hand, `configured` true — was refused\n       * its first build forever, because it had no runtime to rebuild. Every\n       * message went to the local catalog fallback and the footer said Demo\n       * mode, on a shop that was correctly installed.\n       */\n      if (!this.connectedOnce) return;\n      // Still nothing to build: an unconfigured element setting attributes one\n      // at a time would otherwise re-hydrate on each of them for no runtime.\n      if (!this.runtime && !this.configured) return;\n      if (this.runtimeRebuildQueued) return;\n      this.runtimeRebuildQueued = true;\n      queueMicrotask(() => {\n        this.runtimeRebuildQueued = false;\n        if (!this.isConnected) return;\n        if (typeof this.runtime?.disconnect === \"function\") this.runtime.disconnect();\n        this.createRuntime();\n        this.hydrationPromise = this.hydrateSession();\n      });\n    }\n\n    get config() {\n      const requestedSessionMaxAge = Number(this.getAttribute(\"session-max-age\"));\n      const sessionMaxAgeSeconds =\n        Number.isFinite(requestedSessionMaxAge) && requestedSessionMaxAge > 0\n          ? Math.min(Math.floor(requestedSessionMaxAge), MAX_SESSION_MAX_AGE_SECONDS)\n          : DEFAULT_SESSION_MAX_AGE_SECONDS;\n      const requestedConsentMaxAge = Number(this.getAttribute(\"legal-consent-max-age\"));\n      const consentMaxAgeDays =\n        Number.isFinite(requestedConsentMaxAge) && requestedConsentMaxAge > 0\n          ? Math.min(Math.floor(requestedConsentMaxAge), MAX_CONSENT_MAX_AGE_DAYS)\n          : DEFAULT_CONSENT_MAX_AGE_DAYS;\n      const brand = this.getAttribute(\"brand\")?.trim() || \"Mağaza\";\n      return {\n        apiUrl: cleanBase(this.getAttribute(\"api-url\")),\n        workspaceId: this.getAttribute(\"workspace-id\")?.trim() ?? \"\",\n        agentId: this.getAttribute(\"agent-id\")?.trim() ?? \"\",\n        apiKey: this.getAttribute(\"api-key\")?.trim() ?? \"\",\n        catalogUrl: this.getAttribute(\"catalog-url\")?.trim() || \"/api/katalog\",\n        productSource: this.getAttribute(\"product-source\") === \"response\" ? \"response\" : \"catalog\",\n        productCardMode:\n          this.getAttribute(\"product-card-mode\") === \"summary\" ? \"summary\" : \"commerce\",\n        brand,\n        assistantName: this.getAttribute(\"assistant-name\")?.trim() || `${brand} Stil Danışmanı`,\n        assistantMark:\n          plainText(this.getAttribute(\"assistant-mark\") || brand)\n            .slice(0, 2)\n            .toLocaleUpperCase(\"tr-TR\") || \"AI\",\n        launcherTitle: this.getAttribute(\"launcher-title\")?.trim() || \"Stil danışmanı\",\n        launcherSubtitle: this.getAttribute(\"launcher-subtitle\")?.trim() || \"Size özel öneriler\",\n        launcherIcon: this.getAttribute(\"launcher-icon\") === \"message\" ? \"message\" : \"arrow\",\n        showLauncherMark: this.getAttribute(\"show-launcher-mark\") !== \"false\",\n        showLauncherSubtitle: this.getAttribute(\"show-launcher-subtitle\") !== \"false\",\n        greeting:\n          this.getAttribute(\"greeting\")?.trim() || \"Merhaba, size nasıl yardımcı olabilirim?\",\n        greetingMode: this.getAttribute(\"greeting-mode\") === \"message\" ? \"message\" : \"welcome\",\n        placeholder: this.getAttribute(\"placeholder\")?.trim() || \"Nasıl bir parça arıyorsunuz?\",\n        quickPrompts: stringList(this.getAttribute(\"quick-prompts\"), [\n          \"Günlük şık bir görünüm\",\n          \"Bir davet için elbise\",\n          \"Bütçeme göre öner\",\n        ]),\n        accent: this.getAttribute(\"accent-color\")?.trim() || \"#121212\",\n        currency: this.getAttribute(\"currency\")?.trim().toLocaleUpperCase() || \"TRY\",\n        locale: this.getAttribute(\"locale\")?.trim() || \"tr-TR\",\n        stylesheetUrl: stylesheetUrl(this.getAttribute(\"stylesheet-url\")),\n        themeCss: this.getAttribute(\"theme-css\") || \"\",\n        styleNonce: this.getAttribute(\"style-nonce\")?.trim() || \"\",\n        persistSession: this.getAttribute(\"persist-session\") !== \"false\",\n        sessionMaxAgeMs: sessionMaxAgeSeconds * 1000,\n        visitorTracking: this.getAttribute(\"visitor-tracking\") === \"true\",\n        visitorMaxAgeSeconds: Math.min(\n          Math.max(Number(this.getAttribute(\"visitor-max-age\")) || 90 * 24 * 60 * 60, 1),\n          90 * 24 * 60 * 60,\n        ),\n        implicitCartAction: this.getAttribute(\"implicit-cart-action\") === \"true\",\n        showToolActivity: this.getAttribute(\"show-tool-activity\") !== \"false\",\n        showActivityDuration: this.getAttribute(\"show-activity-duration\") === \"true\",\n        showQuantity: this.getAttribute(\"show-quantity\") !== \"false\",\n        colorPicker: this.getAttribute(\"color-picker\") === \"swatches\" ? \"swatches\" : \"select\",\n        toolLabels: stringMap(this.getAttribute(\"tool-labels\")),\n        allowedActionOrigins: actionOrigins(this.getAttribute(\"allowed-action-origins\")),\n        closeOnProductView: this.getAttribute(\"close-on-product-view\") !== \"false\",\n        legalNotice: boundedText(this.getAttribute(\"legal-notice\"), 500),\n        legalUrl: mediaUrl(this.getAttribute(\"legal-url\")),\n        legalLinkLabel: boundedText(this.getAttribute(\"legal-link-label\"), 120),\n        legalAcceptLabel: boundedText(this.getAttribute(\"legal-accept-label\"), 80),\n        legalConsentRequired: this.getAttribute(\"legal-consent-required\") !== \"false\",\n        legalConsentVersion: boundedText(this.getAttribute(\"legal-consent-version\"), 80) || \"1\",\n        legalConsentMaxAgeSeconds: consentMaxAgeDays * 24 * 60 * 60,\n        aiDisclaimer: boundedText(this.getAttribute(\"ai-disclaimer\"), 300),\n      };\n    }\n\n    get labels() {\n      const english = {\n        open: \"Open chat\",\n        close: \"Minimize chat\",\n        newChat: \"Start a new chat\",\n        online: \"Online\",\n        welcomeTitle: \"Let's find it together.\",\n        message: \"Your message\",\n        send: \"Send message\",\n        thinking: \"is reviewing options\",\n        poweredBy: \"Powered by PromptRails\",\n        demo: \"Demo mode\",\n        view: \"View\",\n        add: \"Add to cart\",\n        adding: \"Adding…\",\n        added: \"Added ✓\",\n        cartFailed: \"Try again\",\n        size: \"Size\",\n        color: \"Color\",\n        quantity: \"Quantity\",\n        shipping: \"Shipment\",\n        order: \"Order\",\n        feedback: \"Was this helpful?\",\n        helpful: \"Helpful\",\n        notHelpful: \"Not helpful\",\n        offline: \"You are offline. Check your connection.\",\n        retry: \"Try again\",\n        toolWorking: \"Checking the relevant information…\",\n        toolComplete: \"Information found. Preparing your answer…\",\n        openLink: \"Open link\",\n        whatsapp: \"Message on WhatsApp\",\n        accept: \"Accept\",\n        privacyPolicy: \"Privacy policy\",\n        products: \"Products\",\n        previousProducts: \"Previous products\",\n        nextProducts: \"Next products\",\n        chooseOptions: \"Choose product options\",\n        closeOptions: \"Close product options\",\n        chooseSize: \"Choose a size\",\n      };\n      const turkish = {\n        open: \"Sohbeti aç\",\n        close: \"Sohbeti küçült\",\n        newChat: \"Yeni sohbet başlat\",\n        online: \"Çevrimiçi\",\n        welcomeTitle: \"Birlikte bulalım.\",\n        message: \"Mesajınız\",\n        send: \"Mesajı gönder\",\n        thinking: \"seçkiyi inceliyor\",\n        poweredBy: \"PromptRails ile çalışır\",\n        demo: \"Demo modu\",\n        view: \"İncele\",\n        add: \"Sepete ekle\",\n        adding: \"Ekleniyor…\",\n        added: \"Sepete eklendi ✓\",\n        cartFailed: \"Tekrar dene\",\n        size: \"Beden\",\n        color: \"Renk\",\n        quantity: \"Adet\",\n        shipping: \"Kargo takibi\",\n        order: \"Sipariş\",\n        feedback: \"Bu öneri yardımcı oldu mu?\",\n        helpful: \"Yardımcı oldu\",\n        notHelpful: \"Yardımcı olmadı\",\n        offline: \"Çevrimdışısınız. Bağlantınızı kontrol edin.\",\n        retry: \"Tekrar deneyelim\",\n        toolWorking: \"İlgili bilgileri kontrol ediyorum…\",\n        toolComplete: \"Bilgileri buldum, yanıtınızı hazırlıyorum…\",\n        openLink: \"Bağlantıyı aç\",\n        whatsapp: \"WhatsApp'tan yaz\",\n        accept: \"Kabul et\",\n        privacyPolicy: \"Gizlilik politikası\",\n        products: \"Ürünler\",\n        previousProducts: \"Önceki ürünler\",\n        nextProducts: \"Sonraki ürünler\",\n        chooseOptions: \"Ürün seçeneklerini belirle\",\n        closeOptions: \"Ürün seçeneklerini kapat\",\n        chooseSize: \"Beden seç\",\n      };\n      let custom = {};\n      try {\n        custom = JSON.parse(this.getAttribute(\"translations\") || \"{}\");\n      } catch {\n        /* invalid overrides are ignored */\n      }\n      return {\n        ...(this.config.locale.toLowerCase().startsWith(\"tr\") ? turkish : english),\n        ...custom,\n      };\n    }\n\n    createRuntime() {\n      if (!this.configured) return;\n      this.migrateLegacySession();\n      this.runtime = createBrowserChatRuntime({\n        apiKey: this.config.apiKey,\n        agentId: this.config.agentId,\n        baseUrl: this.config.apiUrl,\n        workspaceId: this.config.workspaceId,\n        title: `${this.config.brand} web store`,\n        metadata: { channel: \"ecommerce_widget\" },\n        persistSession: this.config.persistSession,\n        sessionMaxAge: Math.floor(this.config.sessionMaxAgeMs / 1000),\n        visitorTracking: this.config.visitorTracking,\n        visitorMaxAge: this.config.visitorMaxAgeSeconds,\n        storageKey: `${this.storageKey}:session`,\n        onEvent: (event) => this.emit(\"promptrails:runtime\", event),\n      });\n    }\n\n    get configured() {\n      const { apiUrl, agentId, apiKey } = this.config;\n      return Boolean(apiUrl && agentId && apiKey && !apiKey.startsWith(\"your_\"));\n    }\n\n    get storageKey() {\n      const { workspaceId, agentId } = this.config;\n      return `promptrails-shop-widget:${workspaceId || \"demo\"}:${agentId || \"local\"}`;\n    }\n\n    get consentStorageKey() {\n      return `${this.storageKey}:legal-consent:${this.config.legalConsentVersion}`;\n    }\n\n    get consentCookieName() {\n      return `${this.storageKey}:legal-consent`.replace(/[^a-zA-Z0-9_-]/g, \"_\").slice(0, 120);\n    }\n\n    get consentRequired() {\n      return Boolean(\n        this.config.legalConsentRequired && this.config.legalNotice && this.config.legalUrl,\n      );\n    }\n\n    hasLegalConsent() {\n      if (!this.consentRequired) return true;\n      try {\n        const saved = JSON.parse(localStorage.getItem(this.consentStorageKey) || \"null\");\n        if (saved?.version === this.config.legalConsentVersion && Number(saved?.acceptedAt) > 0)\n          return true;\n      } catch {\n        /* local storage is optional */\n      }\n      try {\n        const expected = encodeURIComponent(this.config.legalConsentVersion);\n        return document.cookie\n          .split(\";\")\n          .some((entry) => entry.trim() === `${this.consentCookieName}=${expected}`);\n      } catch {\n        return false;\n      }\n    }\n\n    acceptLegalConsent() {\n      const acceptedAt = Date.now();\n      try {\n        localStorage.setItem(\n          this.consentStorageKey,\n          JSON.stringify({\n            acceptedAt,\n            version: this.config.legalConsentVersion,\n          }),\n        );\n      } catch {\n        /* cookie remains available as a fallback */\n      }\n      try {\n        const secure = location.protocol === \"https:\" ? \"; Secure\" : \"\";\n        document.cookie = `${this.consentCookieName}=${encodeURIComponent(this.config.legalConsentVersion)}; Path=/; Max-Age=${this.config.legalConsentMaxAgeSeconds}; SameSite=Lax${secure}`;\n      } catch {\n        /* local storage remains available as a fallback */\n      }\n      this.renderShell();\n      requestAnimationFrame(() => this.root.querySelector(\"textarea\")?.focus());\n      this.emit(\"promptrails:legal-consent\", {\n        acceptedAt,\n        version: this.config.legalConsentVersion,\n      });\n    }\n\n    renderShell() {\n      const {\n        assistantName,\n        assistantMark,\n        launcherTitle,\n        launcherSubtitle,\n        launcherIcon,\n        showLauncherMark,\n        showLauncherSubtitle,\n        greeting,\n        greetingMode,\n        placeholder,\n        quickPrompts,\n        accent,\n        stylesheetUrl: customStylesheet,\n        styleNonce,\n        legalNotice,\n        legalUrl,\n        legalLinkLabel,\n        legalAcceptLabel,\n        aiDisclaimer,\n      } = this.config;\n      const labels = this.labels;\n      const consented = this.hasLegalConsent();\n      const legalLink = legalUrl\n        ? `<a href=\"${safe(legalUrl)}\" target=\"_blank\" rel=\"noopener noreferrer\">${safe(legalLinkLabel || labels.privacyPolicy)}</a>`\n        : \"\";\n      const legalText =\n        legalNotice && legalLink\n          ? safe(legalNotice).includes(\"{{link}}\")\n            ? safe(legalNotice).replace(\"{{link}}\", legalLink)\n            : `${safe(legalNotice)} ${legalLink}`\n          : \"\";\n      const inlineNotices = [\n        consented && legalText && !this.consentRequired ? legalText : \"\",\n        aiDisclaimer ? safe(aiDisclaimer) : \"\",\n      ].filter(Boolean);\n      const noticeText = inlineNotices.length\n        ? `<p class=\"legal-summary\" part=\"legal-notice ai-disclaimer\">${inlineNotices.join(' <span aria-hidden=\"true\">·</span> ')}</p>`\n        : \"\";\n      this.root.innerHTML = `<style${styleNonce ? ` nonce=\"${safe(styleNonce)}\"` : \"\"}>${this.styles(accent)}${this.compactStyles()}</style>${customStylesheet ? `<link rel=\"stylesheet\" href=\"${safe(customStylesheet)}\">` : \"\"}\n        <button class=\"launcher\" part=\"launcher\" type=\"button\" aria-label=\"${safe(labels.open)}\" aria-expanded=\"${this.opened}\" aria-controls=\"pt-shop-panel\" ${this.opened ? \"hidden\" : \"\"}>\n          ${showLauncherMark ? `<span class=\"launcher-mark\">${safe(assistantMark)}</span>` : \"\"}<span><strong>${safe(launcherTitle)}</strong>${showLauncherSubtitle ? `<small>${safe(launcherSubtitle)}</small>` : \"\"}</span><i aria-hidden=\"true\">${launcherIcon === \"message\" ? CHAT_ICON : \"↗\"}</i>\n        </button>\n        <section id=\"pt-shop-panel\" class=\"panel ${this.opened ? \"is-open\" : \"\"}\" part=\"panel\" role=\"dialog\" aria-modal=\"false\" aria-label=\"${safe(assistantName)}\" aria-hidden=\"${!this.opened}\">\n          <header part=\"header\"><div><span class=\"avatar\">${safe(assistantMark)}</span><p><strong>${safe(assistantName)}</strong><small><i></i> ${safe(labels.online)}</small></p></div><div class=\"panel-actions\"><button class=\"new-chat\" type=\"button\" aria-label=\"${safe(labels.newChat)}\" title=\"${safe(labels.newChat)}\">＋</button><button class=\"close\" type=\"button\" aria-label=\"${safe(labels.close)}\">×</button></div></header>\n          <div class=\"conversation\" role=\"log\" aria-live=\"polite\" part=\"messages\">\n            ${greetingMode === \"message\" ? `<div class=\"welcome welcome-message message assistant\"><span class=\"mini-avatar\">${safe(assistantMark)}</span><div><p>${safe(greeting)}</p></div></div>` : `<div class=\"welcome\"><span class=\"welcome-mark\">${safe(assistantMark)}</span><h2>${safe(labels.welcomeTitle)}</h2><p>${safe(greeting)}</p></div>`}\n            <div class=\"quick initial\">${quickPrompts.map((prompt) => `<button type=\"button\">${safe(prompt)}</button>`).join(\"\")}</div>\n            <div class=\"messages\"></div>\n            <div class=\"offline\" ${navigator.onLine ? \"hidden\" : \"\"}>${safe(labels.offline)}</div>\n            <div class=\"typing\" part=\"activity\" role=\"status\" aria-live=\"polite\" hidden><span></span><span></span><span></span><em>${safe(assistantName)} ${safe(labels.thinking)}</em>${this.config.showActivityDuration ? \"<time>0 sn</time>\" : \"\"}</div>\n          </div>\n          <button class=\"cart-drawer-backdrop\" type=\"button\" aria-label=\"${safe(labels.closeOptions)}\" hidden></button>\n          <aside class=\"cart-drawer\" part=\"cart-drawer\" role=\"dialog\" aria-modal=\"true\" aria-label=\"${safe(labels.chooseOptions)}\" hidden></aside>\n          ${consented ? `<form class=\"composer\" part=\"composer\"><label class=\"sr-only\" for=\"pt-message\">${safe(labels.message)}</label><textarea id=\"pt-message\" rows=\"1\" maxlength=\"800\" placeholder=\"${safe(placeholder)}\"></textarea><button type=\"submit\" aria-label=\"${safe(labels.send)}\">↑</button></form>` : `<aside class=\"legal-consent\" part=\"legal-consent\" role=\"note\"><p>${legalText}</p><button class=\"accept-legal\" type=\"button\">${safe(legalAcceptLabel || labels.accept)}</button></aside>`}\n          ${noticeText}\n          <footer part=\"footer\"><span>✦</span> ${safe(labels.poweredBy)}${this.configured ? \"\" : ` · ${safe(labels.demo)}`}</footer>\n        </section>`;\n      this.applyThemeCss();\n      this.paintMessages();\n      if (this.cartDrawerProductId) this.renderCartDrawer();\n      this.bind();\n    }\n\n    applyThemeCss() {\n      const { themeCss, styleNonce } = this.config;\n      if (!themeCss) return;\n      const style = document.createElement(\"style\");\n      style.dataset.promptrailsTheme = \"true\";\n      if (styleNonce) style.setAttribute(\"nonce\", styleNonce);\n      style.textContent = themeCss;\n      this.root.append(style);\n    }\n\n    bind() {\n      const launcher = this.root.querySelector(\".launcher\");\n      const close = this.root.querySelector(\".close\");\n      const newChat = this.root.querySelector(\".new-chat\");\n      const form = this.root.querySelector(\".composer\");\n      const acceptLegal = this.root.querySelector(\".accept-legal\");\n      if (launcher) launcher.onclick = () => this.toggle(!this.opened);\n      if (close) close.onclick = () => this.toggle(false);\n      if (newChat) newChat.onclick = () => this.startNewSession();\n      if (acceptLegal) acceptLegal.onclick = () => this.acceptLegalConsent();\n      if (form)\n        form.onsubmit = (event) => {\n          event.preventDefault();\n          const input = this.root.querySelector(\"textarea\");\n          const content = input.value.trim();\n          if (!content || this.busy) return;\n          input.value = \"\";\n          this.send(content);\n        };\n      const textarea = this.root.querySelector(\"textarea\");\n      if (textarea)\n        textarea.onkeydown = (event) => {\n          if (event.key === \"Enter\" && !event.shiftKey) {\n            event.preventDefault();\n            form?.requestSubmit();\n          }\n        };\n      this.root.querySelectorAll(\".initial button\").forEach((button) => {\n        button.onclick = () => this.send(button.textContent);\n      });\n      this.root.querySelectorAll(\"[data-quick]\").forEach((button) => {\n        button.onclick = () => this.send(button.dataset.quick);\n      });\n      this.root.querySelectorAll(\".recommendations-carousel\").forEach((carousel) => {\n        const track = carousel.querySelector(\".recommendations-list\");\n        const previous = carousel.querySelector('[data-carousel-step=\"-1\"]');\n        const next = carousel.querySelector('[data-carousel-step=\"1\"]');\n        if (!track || !previous || !next) return;\n        const update = () => {\n          previous.disabled = track.scrollLeft <= 2;\n          next.disabled = track.scrollLeft >= track.scrollWidth - track.clientWidth - 2;\n        };\n        const move = (direction) => {\n          const cards = [...track.querySelectorAll(\".recommendation\")];\n          if (!cards.length) return;\n          const current = cards.reduce(\n            (closest, card, index) =>\n              Math.abs(card.offsetLeft - track.scrollLeft) <\n              Math.abs(cards[closest].offsetLeft - track.scrollLeft)\n                ? index\n                : closest,\n            0,\n          );\n          const target = cards[Math.max(0, Math.min(cards.length - 1, current + direction))];\n          track.scrollTo({ left: target.offsetLeft - cards[0].offsetLeft, behavior: \"smooth\" });\n          window.setTimeout(update, 350);\n        };\n        previous.onclick = () => move(-1);\n        next.onclick = () => move(1);\n        track.onscroll = update;\n        update();\n      });\n      this.root.querySelectorAll(\"[data-view]\").forEach((button) => {\n        button.onclick = () => {\n          if (this.config.closeOnProductView) this.toggle(false);\n          const product = this.findProduct(button.dataset.productId);\n          this.emit(\"promptrails:product-view\", {\n            slug: button.dataset.view,\n            productId: button.dataset.productId,\n            ...(product?.url ? { url: product.url } : {}),\n          });\n        };\n      });\n      this.root.querySelectorAll(\"[data-cart-drawer-open]\").forEach((button) => {\n        button.onclick = () => {\n          this.openCartDrawer(button.dataset.cartDrawerOpen, button);\n        };\n      });\n      this.root.querySelectorAll(\"[data-add]\").forEach((button) => {\n        button.onclick = () => {\n          const product = this.findProduct(button.dataset.add);\n          if (!product) return;\n          this.requestCartAdd(product, button);\n        };\n      });\n      this.root.querySelectorAll(\"[data-variant]\").forEach((select) => {\n        const product = this.findProduct(select.dataset.productId);\n        const initialValue =\n          select.dataset.variant === \"size\"\n            ? product?.selectedSize\n            : select.dataset.variant === \"color\"\n              ? product?.selectedColor\n              : \"\";\n        if (initialValue && [...select.options].some((option) => option.value === initialValue)) {\n          select.value = initialValue;\n          this.selectedVariants ||= {};\n          this.selectedVariants[select.dataset.productId] ||= {};\n          this.selectedVariants[select.dataset.productId][select.dataset.variant] = initialValue;\n        }\n        select.onchange = () => {\n          this.selectedVariants ||= {};\n          this.selectedVariants[select.dataset.productId] ||= {};\n          this.selectedVariants[select.dataset.productId][select.dataset.variant] = select.value;\n        };\n      });\n      this.root.querySelectorAll(\"[data-color-value]\").forEach((button) => {\n        button.onclick = () => {\n          const productId = button.dataset.productId;\n          this.selectedVariants ||= {};\n          this.selectedVariants[productId] ||= {};\n          this.selectedVariants[productId].color = button.dataset.colorValue;\n          button.parentElement?.querySelectorAll(\"[data-color-value]\").forEach((item) => {\n            item.setAttribute(\"aria-pressed\", String(item === button));\n          });\n          const value = button.closest(\"label\")?.querySelector(\".swatch-value\");\n          if (value) value.textContent = button.dataset.colorValue;\n        };\n      });\n      this.root.querySelectorAll(\"[data-feedback]\").forEach((button) => {\n        button.onclick = () =>\n          this.submitFeedback(Number(button.dataset.messageIndex), Number(button.dataset.feedback));\n      });\n      this.root.querySelectorAll(\"[data-action-url]\").forEach((link) => {\n        link.onclick = () =>\n          this.emit(\"promptrails:action-open\", {\n            url: link.href,\n            label: link.textContent?.trim() || \"\",\n          });\n      });\n      const drawerBackdrop = this.root.querySelector(\".cart-drawer-backdrop\");\n      if (drawerBackdrop) drawerBackdrop.onclick = () => this.closeCartDrawer();\n      this.bindCartDrawer();\n    }\n\n    availableVariants(product) {\n      return (Array.isArray(product?.variants) ? product.variants : []).filter(\n        (variant) => variant?.available !== false,\n      );\n    }\n\n    resolvedVariant(product, selected = {}) {\n      const variants = this.availableVariants(product);\n      if (!variants.length) return product?.variantId ? { id: product.variantId } : null;\n      return (\n        variants.find(\n          (variant) =>\n            (!selected.size || variant.size === selected.size) &&\n            (!selected.color || variant.color === selected.color),\n        ) || null\n      );\n    }\n\n    openCartDrawer(productId, trigger) {\n      const product = this.findProduct(productId);\n      if (!product || product.canAdd === false || product.inStock === false) return;\n      const variants = this.availableVariants(product);\n      const preferred =\n        variants.find((variant) => variant.id === product.variantId) ||\n        variants.find(\n          (variant) =>\n            (!product.selectedSize || variant.size === product.selectedSize) &&\n            (!product.selectedColor || variant.color === product.selectedColor),\n        ) ||\n        variants[0];\n      this.selectedVariants ||= {};\n      this.selectedVariants[product.id] = {\n        size: preferred?.size || product.selectedSize || product.sizes?.[0] || \"\",\n        color: preferred?.color || product.selectedColor || product.colors?.[0] || \"\",\n        quantity: Number(this.selectedVariants[product.id]?.quantity) || 1,\n      };\n      this.cartDrawerProductId = product.id;\n      this.cartDrawerTrigger = trigger || null;\n      this.renderCartDrawer();\n    }\n\n    closeCartDrawer({ restoreFocus = true } = {}) {\n      const drawer = this.root.querySelector(\".cart-drawer\");\n      const backdrop = this.root.querySelector(\".cart-drawer-backdrop\");\n      if (drawer) drawer.hidden = true;\n      if (backdrop) backdrop.hidden = true;\n      this.cartDrawerProductId = \"\";\n      if (restoreFocus) this.cartDrawerTrigger?.focus();\n      this.cartDrawerTrigger = null;\n    }\n\n    renderCartDrawer() {\n      const drawer = this.root.querySelector(\".cart-drawer\");\n      const backdrop = this.root.querySelector(\".cart-drawer-backdrop\");\n      const product = this.findProduct(this.cartDrawerProductId);\n      if (\n        !drawer ||\n        !backdrop ||\n        !product ||\n        product.canAdd === false ||\n        product.inStock === false\n      ) {\n        this.closeCartDrawer({ restoreFocus: false });\n        return;\n      }\n      const selected = this.selectedVariants?.[product.id] || {};\n      const variants = this.availableVariants(product);\n      const sizes = uniqueText(\n        variants.map((variant) => variant.size).filter(Boolean).length\n          ? variants.map((variant) => variant.size)\n          : product.sizes,\n      );\n      if (sizes.length && !sizes.includes(selected.size)) selected.size = sizes[0];\n      const colorVariants = variants.filter(\n        (variant) => !selected.size || !variant.size || variant.size === selected.size,\n      );\n      const colors = uniqueText(\n        colorVariants.map((variant) => variant.color).filter(Boolean).length\n          ? colorVariants.map((variant) => variant.color)\n          : product.colors,\n      );\n      if (colors.length && !colors.includes(selected.color)) selected.color = colors[0];\n      const resolved = this.resolvedVariant(product, selected);\n      const canSubmit = !variants.length || Boolean(resolved?.id);\n      drawer.innerHTML = `<div class=\"cart-drawer-handle\" aria-hidden=\"true\"></div>\n        <div class=\"cart-drawer-header\"><div><small>${safe(product.category)}</small><h3>${safe(product.name)}</h3></div><button type=\"button\" data-cart-drawer-close aria-label=\"${safe(this.labels.closeOptions)}\">×</button></div>\n        ${sizes.length ? `<fieldset><legend>${safe(this.labels.size)}</legend><div class=\"drawer-options\">${sizes.map((size) => `<button type=\"button\" data-drawer-option=\"size\" data-option-value=\"${safe(size)}\" aria-pressed=\"${size === selected.size}\">${safe(size)}</button>`).join(\"\")}</div></fieldset>` : \"\"}\n        ${colors.length ? `<fieldset><legend>${safe(this.labels.color)}</legend><div class=\"drawer-options drawer-colors\">${colors.map((color) => `<button type=\"button\" data-drawer-option=\"color\" data-option-value=\"${safe(color)}\" aria-pressed=\"${color === selected.color}\"><i style=\"--swatch:${colorSwatch(color)}\"></i>${safe(color)}</button>`).join(\"\")}</div></fieldset>` : \"\"}\n        ${this.config.showQuantity ? `<label class=\"drawer-quantity\"><span>${safe(this.labels.quantity)}</span><select data-drawer-quantity><option${selected.quantity === 1 ? \" selected\" : \"\"}>1</option><option${selected.quantity === 2 ? \" selected\" : \"\"}>2</option><option${selected.quantity === 3 ? \" selected\" : \"\"}>3</option></select></label>` : \"\"}\n        <button type=\"button\" class=\"drawer-add\" data-add=\"${safe(product.id)}\"${canSubmit ? \"\" : \" disabled\"}>${safe(canSubmit ? this.labels.add : this.labels.chooseSize)}</button>`;\n      drawer.hidden = false;\n      backdrop.hidden = false;\n      this.bindCartDrawer();\n      requestAnimationFrame(() => drawer.querySelector(\"[data-cart-drawer-close]\")?.focus());\n    }\n\n    bindCartDrawer() {\n      const drawer = this.root.querySelector(\".cart-drawer\");\n      if (!drawer || drawer.hidden) return;\n      const close = drawer.querySelector(\"[data-cart-drawer-close]\");\n      if (close) close.onclick = () => this.closeCartDrawer();\n      drawer.querySelectorAll(\"[data-drawer-option]\").forEach((button) => {\n        button.onclick = () => {\n          const product = this.findProduct(this.cartDrawerProductId);\n          if (!product) return;\n          this.selectedVariants ||= {};\n          this.selectedVariants[product.id] ||= {};\n          this.selectedVariants[product.id][button.dataset.drawerOption] =\n            button.dataset.optionValue;\n          this.renderCartDrawer();\n        };\n      });\n      const quantity = drawer.querySelector(\"[data-drawer-quantity]\");\n      if (quantity)\n        quantity.onchange = () => {\n          const selected = this.selectedVariants?.[this.cartDrawerProductId];\n          if (selected) selected.quantity = Number(quantity.value) || 1;\n        };\n      const add = drawer.querySelector(\"[data-add]\");\n      if (add)\n        add.onclick = () => {\n          const product = this.findProduct(add.dataset.add);\n          if (product) this.requestCartAdd(product, add);\n        };\n    }\n\n    requestCartAdd(product, button) {\n      if (!product || product.canAdd === false || product.inStock === false || button.disabled)\n        return;\n      const selected = this.selectedVariants?.[product.id] || {};\n      const variant = this.resolvedVariant(product, selected);\n      button.disabled = true;\n      button.dataset.idleLabel = button.textContent || this.labels.add;\n      button.textContent = this.labels.adding;\n      this.emit(\"promptrails:cart-add\", {\n        productId: product.id,\n        variantId: variant?.id || (!product.variants?.length ? product.variantId : undefined),\n        slug: product.slug,\n        size: selected.size || product.selectedSize || product.sizes?.[0],\n        color: selected.color || product.selectedColor || product.colors?.[0],\n        quantity: Number(selected.quantity) || 1,\n      });\n      window.clearTimeout(this.cartTimers.get(product.id));\n      this.cartTimers.set(\n        product.id,\n        window.setTimeout(() => {\n          this.cartFailed({ detail: { productId: product.id } });\n          this.emit(\"promptrails:error\", {\n            code: \"cart_confirmation_timeout\",\n            productId: product.id,\n          });\n        }, 10_000),\n      );\n    }\n\n    toggle(next) {\n      if (!next && this.cartDrawerProductId) this.closeCartDrawer({ restoreFocus: false });\n      this.opened = next;\n      this.setPageScrollLocked(next);\n      this.root.querySelector(\".panel\")?.classList.toggle(\"is-open\", next);\n      this.root.querySelector(\".panel\")?.setAttribute(\"aria-hidden\", String(!next));\n      const launcher = this.root.querySelector(\".launcher\");\n      launcher?.setAttribute(\"aria-expanded\", String(next));\n      if (launcher) launcher.hidden = next;\n      if (next && !this.isMobileViewport()) {\n        requestAnimationFrame(() =>\n          (\n            this.root.querySelector(\"textarea\") || this.root.querySelector(\".accept-legal\")\n          )?.focus(),\n        );\n      }\n      this.emit(next ? \"promptrails:open\" : \"promptrails:close\", {});\n    }\n\n    isMobileViewport() {\n      return (\n        typeof window.matchMedia === \"function\" &&\n        window.matchMedia(\"(max-width: 560px), (pointer: coarse)\").matches\n      );\n    }\n\n    setPageScrollLocked(locked) {\n      if (locked && this.isMobileViewport()) {\n        if (this.pageOverflowBeforeOpen === undefined) {\n          this.pageOverflowBeforeOpen = document.documentElement.style.overflow;\n        }\n        document.documentElement.style.overflow = \"hidden\";\n        return;\n      }\n      if (this.pageOverflowBeforeOpen !== undefined) {\n        document.documentElement.style.overflow = this.pageOverflowBeforeOpen;\n        this.pageOverflowBeforeOpen = undefined;\n      }\n    }\n\n    open() {\n      this.toggle(true);\n    }\n    close() {\n      this.toggle(false);\n    }\n    newSession() {\n      return this.startNewSession();\n    }\n    clearVisitor() {\n      this.runtime?.clearVisitor();\n    }\n    updateContext(context = {}) {\n      this.context = { ...this.context, ...context };\n    }\n    destroy() {\n      this.remove();\n    }\n\n    handleWindowKey(event) {\n      if (event.key === \"Escape\" && this.cartDrawerProductId) {\n        event.preventDefault();\n        this.closeCartDrawer();\n        return;\n      }\n      if (event.key === \"Escape\" && this.opened) {\n        event.preventDefault();\n        this.toggle(false);\n        return;\n      }\n      if (!this.opened || event.key !== \"Tab\") return;\n      const focusable = [\n        ...this.root.querySelectorAll(\n          'button:not([disabled]), textarea:not([disabled]), select:not([disabled]), [href], [tabindex]:not([tabindex=\"-1\"])',\n        ),\n      ];\n      if (!focusable.length) return;\n      const first = focusable[0];\n      const last = focusable.at(-1);\n      if (event.shiftKey && this.root.activeElement === first) {\n        event.preventDefault();\n        last.focus();\n      } else if (!event.shiftKey && this.root.activeElement === last) {\n        event.preventDefault();\n        first.focus();\n      }\n    }\n\n    emit(name, detail) {\n      this.dispatchEvent(new CustomEvent(name, { detail, bubbles: true, composed: true }));\n    }\n\n    async startNewSession() {\n      this.messages = [];\n      try {\n        localStorage.removeItem(this.storageKey);\n        sessionStorage.removeItem(this.storageKey);\n      } catch {\n        /* storage is optional */\n      }\n      await this.runtime?.newSession();\n      this.paintMessages();\n      this.root.querySelector(\"textarea\")?.focus();\n      this.emit(\"promptrails:session-new\", {});\n    }\n\n    async loadCatalog() {\n      try {\n        const response = await fetch(this.config.catalogUrl, {\n          headers: { Accept: \"application/json\" },\n          credentials: \"same-origin\",\n        });\n        if (!response.ok) throw new Error(\"Katalog yüklenemedi\");\n        const body = await response.json();\n        this.catalog = Array.isArray(body.products)\n          ? body.products\n          : Array.isArray(body.data?.products)\n            ? body.data.products\n            : [];\n      } catch {\n        this.catalog = [];\n      }\n    }\n\n    findProduct(id) {\n      const expected = String(id ?? \"\");\n      return (\n        this.catalog.find((item) => String(item.id) === expected) ||\n        this.messages\n          .flatMap((message) => message.products || [])\n          .find((item) => String(item.id) === expected)\n      );\n    }\n\n    restore() {\n      if (!this.config.persistSession) return;\n      try {\n        const serialized =\n          localStorage.getItem(this.storageKey) || sessionStorage.getItem(this.storageKey) || \"{}\";\n        const saved = JSON.parse(serialized);\n        const lastActivityAt = Number(saved.lastActivityAt);\n        const age = Date.now() - lastActivityAt;\n        if (!Number.isFinite(lastActivityAt) || age < 0 || age > this.config.sessionMaxAgeMs) {\n          localStorage.removeItem(this.storageKey);\n          sessionStorage.removeItem(this.storageKey);\n          return;\n        }\n        this.messages = Array.isArray(saved.messages)\n          ? saved.messages\n              .slice(-20)\n              .map((message) =>\n                message?.role === \"user\"\n                  ? { ...message, text: visibleUserText(message.text) }\n                  : message,\n              )\n          : [];\n        localStorage.setItem(\n          this.storageKey,\n          JSON.stringify({ messages: this.messages, lastActivityAt }),\n        );\n        sessionStorage.removeItem(this.storageKey);\n        this.paintMessages();\n      } catch {\n        /* private-mode storage can be unavailable */\n      }\n    }\n\n    persist() {\n      if (!this.config.persistSession) return;\n      try {\n        localStorage.setItem(\n          this.storageKey,\n          JSON.stringify({\n            messages: this.messages.slice(-20),\n            lastActivityAt: Date.now(),\n          }),\n        );\n      } catch {\n        /* optional persistence */\n      }\n    }\n\n    migrateLegacySession() {\n      if (!this.config.persistSession) return;\n      try {\n        const raw =\n          localStorage.getItem(this.storageKey) || sessionStorage.getItem(this.storageKey);\n        if (!raw || localStorage.getItem(`${this.storageKey}:session`)) return;\n        const saved = JSON.parse(raw);\n        const sessionId = typeof saved.chatId === \"string\" ? saved.chatId : saved.sessionId;\n        if (\n          /^[0-9A-Za-z]{27}$/.test(sessionId || \"\") &&\n          typeof saved.resumeToken === \"string\" &&\n          saved.resumeToken.length >= 32\n        ) {\n          localStorage.setItem(\n            `${this.storageKey}:session`,\n            JSON.stringify({\n              sessionId,\n              resumeToken: saved.resumeToken,\n              lastActivityAt: Number(saved.lastActivityAt) || Date.now(),\n            }),\n          );\n        }\n      } catch {\n        /* optional migration */\n      }\n    }\n\n    async hydrateSession() {\n      if (!this.runtime) return;\n      try {\n        const rows = await this.runtime.hydrate();\n        if (!rows.length) {\n          this.persist();\n          return;\n        }\n        this.messages = rows\n          .filter((row) => row?.role === \"user\" || row?.role === \"assistant\")\n          .map((row) => {\n            if (row.role === \"user\") return { role: \"user\", text: visibleUserText(row.content) };\n            return {\n              role: \"assistant\",\n              ...this.normalizeAnswer({\n                output: row.content,\n                executionId: row.executionId || row.metadata?.execution_id,\n              }),\n            };\n          })\n          .slice(-20);\n        this.persist();\n        this.paintMessages();\n      } catch {\n        /* unavailable history starts fresh */\n      }\n    }\n\n    async send(content) {\n      this.toggle(true);\n      if (!navigator.onLine) {\n        this.emit(\"promptrails:error\", { code: \"offline\" });\n        return;\n      }\n      if (!this.ready) await this.loadCatalog();\n      await this.hydrationPromise;\n      this.messages.push({ role: \"user\", text: content });\n      this.busy = true;\n      this.activeTools.clear();\n      this.paintMessages();\n      this.setTyping(true);\n      try {\n        const result = this.runtime\n          ? await this.askPromptRails(content)\n          : await this.localAnswer(content);\n        this.messages.push({ role: \"assistant\", ...result });\n      } catch (error) {\n        this.messages.push({\n          role: \"assistant\",\n          text: this.errorMessage(error),\n          products: [],\n          quickReplies: [this.labels.retry],\n        });\n      } finally {\n        this.busy = false;\n        this.activeTools.clear();\n        this.setTyping(false);\n        this.persist();\n        this.paintMessages();\n      }\n    }\n\n    async askPromptRails(customerMessage) {\n      if (!this.runtime) throw new Error(\"Chat runtime is not configured.\");\n      const pageContext =\n        typeof this.contextProvider === \"function\" ? await this.contextProvider() : {};\n      const context = {\n        title: document.title,\n        path: location.pathname,\n        ...pageContext,\n        ...this.context,\n      };\n      let finalOutput;\n      let ui;\n      let executionId = \"\";\n      try {\n        for await (const event of this.runtime.sendMessageStream({\n          content: customerMessage,\n          context,\n        })) {\n          if (event.type === \"error\") throw new Error(event.error || \"Agent could not respond.\");\n          if (event.type === \"execution\") executionId = event.executionId || \"\";\n          if (event.type === \"tool_start\") this.startToolActivity(event.toolCallId, event.toolName);\n          if (event.type === \"tool_end\") this.endToolActivity(event.toolCallId, event.toolName);\n          if (event.type === \"ui\") ui = event.ui;\n          if (event.type === \"done\") finalOutput = event.output;\n        }\n        if (finalOutput === undefined) throw new Error(\"Agent response did not complete.\");\n        return this.normalizeAnswer({ output: finalOutput, ui, executionId });\n      } catch (error) {\n        if (error?.status !== 403) throw error;\n        await this.runtime.newSession();\n        return this.askPromptRails(customerMessage);\n      }\n    }\n\n    normalizeAnswer(result) {\n      let value = result?.output ?? result;\n      if (value && typeof value === \"object\" && \"content\" in value) value = value.content;\n      if (value && typeof value === \"object\" && \"output\" in value) value = value.output;\n      if (typeof value === \"string\") {\n        const candidate = value\n          .replace(/^```(?:json)?\\s*/i, \"\")\n          .replace(/\\s*```$/, \"\")\n          .trim();\n        try {\n          value = JSON.parse(candidate);\n        } catch {\n          value = { message: plainText(value) };\n        }\n      }\n      if (!value || typeof value !== \"object\") value = { message: plainText(value) };\n      const genericUI = normalizeChatUI(result?.ui) || normalizeChatUI(value.ui);\n      const resources = genericUI\n        ? genericUI.resources.filter((resource) => resource.kind === \"product\")\n        : [];\n      const statusCards = genericUI\n        ? genericUI.resources\n            .filter((resource) => [\"order\", \"order_tracking\", \"status\"].includes(resource.kind))\n            .map((resource) => ({ id: resource.id, kind: resource.kind, ...resource.attributes }))\n            .slice(0, 3)\n        : [];\n      const requested = resources.length\n        ? resources\n        : Array.isArray(value.products)\n          ? value.products\n          : Array.isArray(value.urunler)\n            ? value.urunler\n            : [];\n      const actions = genericUI?.actions || [];\n      const messageWithActions = extractTextActions(\n        value.message ?? value.mesaj ?? value.answer ?? \"Seçkiden birkaç alternatif hazırladım.\",\n        this.config.allowedActionOrigins,\n        this.labels,\n      );\n      const standaloneActions = actions\n        .filter((action) => !action.resourceId && action.kind === \"resource.open\")\n        .map((action) => {\n          const url = allowedActionUrl(\n            action.payload?.url ?? action.payload?.href,\n            this.config.allowedActionOrigins,\n          );\n          return url ? { url, label: actionLabel(url, action.label, this.labels) } : null;\n        })\n        .filter(Boolean);\n      const messageActions = [...standaloneActions, ...messageWithActions.actions]\n        .filter(\n          (action, index, all) =>\n            all.findIndex((candidate) => candidate.url === action.url) === index,\n        )\n        .slice(0, 3);\n      const products = requested\n        .map((entry) => {\n          const id = boundedText(\n            typeof entry === \"string\" ? entry : (entry.id ?? entry.product_id),\n            160,\n          );\n          const attributes =\n            entry?.attributes && typeof entry.attributes === \"object\" ? entry.attributes : entry;\n          const product =\n            this.config.productSource === \"response\"\n              ? responseProduct(entry)\n              : this.catalog.find((item) => String(item.id) === id);\n          const resourceActions = actions.filter((action) => String(action.resourceId) === id);\n          const viewAction = resourceActions.find((action) => action.kind === \"resource.open\");\n          const addAction = resourceActions.find((action) => action.kind === \"cart.add\");\n          const implicitCartAction =\n            this.config.implicitCartAction &&\n            Boolean(product?.variantId) &&\n            product?.selectedVariantIdProvided === true &&\n            product?.stockKnown === true &&\n            product?.inStock === true;\n          return product\n            ? {\n                ...product,\n                reason: plainText(\n                  attributes.reason ?? attributes.neden ?? \"Size uygun bir seçenek.\",\n                ),\n                canView: !genericUI || Boolean(viewAction),\n                canAdd:\n                  (!genericUI || Boolean(addAction) || implicitCartAction) &&\n                  product.inStock !== false,\n                viewLabel: this.labels.view,\n                addLabel: this.labels.add,\n              }\n            : null;\n        })\n        .filter(Boolean)\n        .slice(0, 3);\n      return {\n        text: messageWithActions.text,\n        actions: messageActions,\n        products,\n        statusCards,\n        quickReplies: genericUI\n          ? genericUI.suggestions\n              .map((item) => ({ label: plainText(item.label), value: plainText(item.value) }))\n              .slice(0, 3)\n          : (value.quick_replies ?? value.hizli_yanitlar ?? [])\n              .filter((item) => typeof item === \"string\")\n              .slice(0, 3),\n        executionId: String(result?.executionId ?? \"\"),\n      };\n    }\n\n    async localAnswer(message) {\n      const normalized = message.toLocaleLowerCase(\"tr-TR\");\n      const budget = Number(\n        normalized.match(/(?:altında|kadar|bütçe.{0,8})([\\d.]+)/)?.[1]?.replaceAll(\".\", \"\"),\n      );\n      const words = normalized\n        .replace(/[^a-zçğıöşü0-9 ]/gi, \" \")\n        .split(/\\s+/)\n        .filter((word) => word.length > 2);\n      let pool = this.catalog;\n      if (/elbise/.test(normalized))\n        pool = pool.filter((product) => /elbise/i.test(product.category));\n      else if (/çanta/.test(normalized))\n        pool = pool.filter((product) => /çanta/i.test(product.category));\n      else if (/ayakkabı|ayakkabi|loafer|topuk/.test(normalized))\n        pool = pool.filter((product) => /ayakkabı/i.test(product.category));\n      else if (/palto|trençkot|trenc|blazer|dış giyim/.test(normalized))\n        pool = pool.filter((product) => /dış giyim/i.test(product.category));\n      const ranked = pool\n        .map((product) => {\n          const text = [\n            product.name,\n            product.category,\n            product.description,\n            product.material,\n            ...(product.tags || []),\n            ...(product.colors || []),\n          ]\n            .join(\" \")\n            .toLocaleLowerCase(\"tr-TR\");\n          let score = words.reduce((total, word) => total + (text.includes(word) ? 3 : 0), 0);\n          if (/davet|gece|nikah|özel/.test(normalized) && /elbise/.test(text)) score += 8;\n          if (/günlük|rahat|ofis/.test(normalized) && /blazer|pantolon|gömlek/.test(text))\n            score += 6;\n          if (/çanta/.test(normalized) && /çanta/.test(text)) score += 9;\n          if (budget && product.price > budget) score -= 20;\n          return { ...product, score };\n        })\n        .filter((product) => !budget || product.price <= budget)\n        .sort((a, b) => b.score - a.score || a.price - b.price)\n        .slice(0, 3);\n      return {\n        text: ranked.length\n          ? \"Tarzınıza ve ihtiyacınıza uyabilecek bu parçaları seçtim. İlk önerim özellikle dengeli formuyla güçlü bir başlangıç.\"\n          : \"Bu bütçede eşleşen bir parça bulamadım; aralığı biraz genişletmek ister misiniz?\",\n        products: ranked.map((product) => ({\n          ...product,\n          reason: /davet/.test(normalized)\n            ? \"Zarif silueti davet görünümüne çok uygun.\"\n            : \"Zamansız formu farklı parçalarla kolayca birleşir.\",\n        })),\n        quickReplies: [\"Daha sade seçenekler\", \"Sadece siyah göster\", \"Beden konusunda yardım\"],\n      };\n    }\n\n    errorMessage(error) {\n      const message = error instanceof Error ? error.message : \"Bağlantı kurulamadı.\";\n      if (/origin|cors/i.test(message))\n        return \"Bu mağaza alan adı henüz agent'ın izinli origin listesinde değil. Mağaza yöneticisi PromptRails ayarlarını kontrol etmeli.\";\n      if (/429|credits|billing|rate limit/i.test(message))\n        return \"Stil danışmanımız şu anda yoğun. Lütfen kısa bir süre sonra yeniden deneyin.\";\n      return \"Şu anda stil danışmanımıza ulaşamıyoruz. Lütfen biraz sonra yeniden deneyin.\";\n    }\n\n    startToolActivity(id, name) {\n      if (!this.config.showToolActivity) return;\n      const key = String(id || name || `tool-${this.activeTools.size + 1}`);\n      this.activeTools.set(key, String(name || \"\"));\n      this.setTyping(true, this.config.toolLabels[name] || this.labels.toolWorking, \"running\");\n    }\n\n    endToolActivity(id, name) {\n      if (!this.config.showToolActivity) return;\n      this.activeTools.delete(String(id || name || \"\"));\n      const remaining = [...this.activeTools.values()].at(-1);\n      if (remaining !== undefined) {\n        this.setTyping(\n          true,\n          this.config.toolLabels[remaining] || this.labels.toolWorking,\n          \"running\",\n        );\n        return;\n      }\n      this.setTyping(true, this.labels.toolComplete, \"complete\");\n    }\n\n    setTyping(visible, text = \"\", state = \"thinking\") {\n      const element = this.root.querySelector(\".typing\");\n      if (element) {\n        if (visible && !this.activityStartedAt) {\n          this.activityStartedAt = Date.now();\n          if (this.config.showActivityDuration) {\n            window.clearInterval(this.activityTimer);\n            this.activityTimer = window.setInterval(() => this.updateActivityElapsed(), 1_000);\n          }\n        }\n        if (!visible) {\n          window.clearInterval(this.activityTimer);\n          this.activityTimer = 0;\n          this.activityStartedAt = 0;\n        }\n        element.hidden = !visible;\n        element.classList.toggle(\"is-finalizing\", visible && state === \"complete\");\n        const label = element.querySelector(\"em\");\n        if (label)\n          label.textContent = text || `${this.config.assistantName} ${this.labels.thinking}`;\n        this.updateActivityElapsed();\n      }\n      this.scroll();\n    }\n\n    updateActivityElapsed() {\n      const elapsed = this.root.querySelector(\".typing time\");\n      if (!elapsed || !this.activityStartedAt) return;\n      elapsed.textContent = `${Math.max(0, Math.floor((Date.now() - this.activityStartedAt) / 1_000))} sn`;\n    }\n\n    cartConfirmed(event) {\n      const id = event.detail?.productId;\n      window.clearTimeout(this.cartTimers.get(id));\n      this.cartTimers.delete(id);\n      const button = this.root.querySelector(`[data-add=\"${CSS.escape(String(id))}\"]`);\n      if (button) {\n        button.textContent = this.labels.added;\n        button.disabled = false;\n      }\n    }\n\n    cartFailed(event) {\n      const id = event.detail?.productId;\n      window.clearTimeout(this.cartTimers.get(id));\n      this.cartTimers.delete(id);\n      const button = this.root.querySelector(`[data-add=\"${CSS.escape(String(id))}\"]`);\n      if (button) {\n        button.textContent = button.dataset.idleLabel || this.labels.cartFailed;\n        button.disabled = false;\n      }\n    }\n\n    async submitFeedback(messageIndex, value) {\n      const message = this.messages[messageIndex];\n      if (!message?.executionId || !this.runtime || ![-1, 1].includes(value)) return;\n      message.feedback = value;\n      this.persist();\n      this.paintMessages();\n      try {\n        await this.runtime.submitFeedback(message.executionId, value);\n        this.emit(\"promptrails:feedback\", { executionId: message.executionId, value });\n      } catch {\n        delete message.feedback;\n        this.persist();\n        this.paintMessages();\n      }\n    }\n\n    paintMessages() {\n      const target = this.root.querySelector(\".messages\");\n      if (!target) return;\n      this.root\n        .querySelector(\".conversation\")\n        ?.classList.toggle(\"has-messages\", this.messages.length > 0);\n      target.innerHTML = this.messages\n        .map((message, index) =>\n          message.role === \"user\"\n            ? `<article class=\"message user\"><p>${safe(message.text)}</p></article>`\n            : `<article class=\"message assistant\" part=\"message assistant-message\"><span class=\"mini-avatar\">${safe(this.config.assistantMark)}</span><div><p>${safe(message.text)}</p>${this.actionMarkup(message.actions)}${this.productMarkup(message.products)}${this.statusMarkup(message.statusCards)}${this.quickMarkup(message.quickReplies)}${this.feedbackMarkup(message, index)}</div></article>`,\n        )\n        .join(\"\");\n      this.bind();\n      this.scroll(this.messages.at(-1)?.role === \"assistant\" ? \"message\" : \"bottom\");\n    }\n\n    productMarkup(products = []) {\n      if (!products.length) return \"\";\n      const money = new Intl.NumberFormat(this.config.locale, {\n        style: \"currency\",\n        currency: this.config.currency,\n        maximumFractionDigits: 0,\n      });\n      const summary = this.config.productCardMode === \"summary\";\n      const cards = `<div class=\"recommendations-list${summary ? \" is-summary\" : \"\"}\">${products\n        .map(\n          (\n            product,\n          ) => `<article class=\"recommendation${summary ? \" is-summary\" : \"\"}${plainText(product.name).length > 28 ? \" has-long-title\" : \"\"}\" part=\"card product-card\">\n        ${\n          product.canView === false\n            ? `<div class=\"recommendation-image\" role=\"img\" aria-label=\"${safe(product.name)}\" style=\"background-image:url('${safe(mediaUrl(product.imageUrl))}');background-position:${slotPosition[product.imageSlot] || \"center\"};background-size:${Number.isInteger(product.imageSlot) ? \"400% 200%\" : \"cover\"}\"></div>`\n            : `<button type=\"button\" class=\"recommendation-image product-image-link\" data-view=\"${safe(product.slug)}\" data-product-id=\"${safe(product.id)}\" aria-label=\"${safe(`${product.name} ${product.viewLabel || this.labels.view}`)}\" style=\"background-image:url('${safe(mediaUrl(product.imageUrl))}');background-position:${slotPosition[product.imageSlot] || \"center\"};background-size:${Number.isInteger(product.imageSlot) ? \"400% 200%\" : \"cover\"}\"></button>`\n        }\n        ${summary && product.canAdd !== false && product.inStock !== false ? `<button type=\"button\" class=\"product-add-trigger\" data-cart-drawer-open=\"${safe(product.id)}\" aria-label=\"${safe(`${product.name} ${product.addLabel || this.labels.add}`)}\">＋</button>` : \"\"}\n        <div class=\"recommendation-copy\"><small>${safe(product.category)}</small><h3>${product.canView === false ? safe(product.name) : `<button type=\"button\" class=\"product-title\" data-view=\"${safe(product.slug)}\" data-product-id=\"${safe(product.id)}\">${safe(product.name)}</button>`}</h3><div class=\"price\">${product.compareAt > product.price ? `<del>${money.format(Number(product.compareAt) || 0)}</del>` : \"\"}<strong>${money.format(Number(product.price) || 0)}</strong></div><p>${safe(product.reason)}</p></div>\n        ${\n          !summary && (product.sizes?.length || product.colors?.length)\n            ? `<div class=\"variants\">\n          ${product.sizes?.length === 1 ? `<label><span>${safe(this.labels.size)}</span><output class=\"variant-locked\">${safe(product.sizes[0])}</output></label>` : product.sizes?.length ? `<label><span>${safe(this.labels.size)}</span><select data-variant=\"size\" data-product-id=\"${safe(product.id)}\">${product.sizes.map((size) => `<option value=\"${safe(size)}\"${size === product.selectedSize ? \" selected\" : \"\"}>${safe(size)}</option>`).join(\"\")}</select></label>` : \"\"}\n          ${product.colors?.length === 1 ? `<label><span>${safe(this.labels.color)}</span><output class=\"variant-locked\">${safe(product.colors[0])}</output></label>` : product.colors?.length ? (this.config.colorPicker === \"swatches\" ? `<label class=\"color-picker\"><span>${safe(this.labels.color)} · <output class=\"swatch-value\">${safe(product.selectedColor || product.colors[0])}</output></span><span class=\"color-swatches\" role=\"group\" aria-label=\"${safe(this.labels.color)}\">${product.colors.map((color) => `<button type=\"button\" data-color-value=\"${safe(color)}\" data-product-id=\"${safe(product.id)}\" aria-label=\"${safe(color)}\" aria-pressed=\"${color === (product.selectedColor || product.colors[0])}\" style=\"--swatch:${colorSwatch(color)}\"></button>`).join(\"\")}</span></label>` : `<label><span>${safe(this.labels.color)}</span><select data-variant=\"color\" data-product-id=\"${safe(product.id)}\">${product.colors.map((color) => `<option value=\"${safe(color)}\"${color === product.selectedColor ? \" selected\" : \"\"}>${safe(color)}</option>`).join(\"\")}</select></label>`) : \"\"}\n          ${this.config.showQuantity ? `<label><span>${safe(this.labels.quantity)}</span><select data-variant=\"quantity\" data-product-id=\"${safe(product.id)}\"><option>1</option><option>2</option><option>3</option></select></label>` : \"\"}\n        </div>`\n            : \"\"\n        }\n        ${\n          summary\n            ? \"\"\n            : `<div class=\"recommendation-actions\">\n          ${product.canView === false ? \"\" : `<button type=\"button\" class=\"view\" data-view=\"${safe(product.slug)}\" data-product-id=\"${safe(product.id)}\">${safe(product.viewLabel || this.labels.view)}</button>`}\n          ${product.canAdd === false || product.inStock === false ? \"\" : `<button type=\"button\" class=\"add\" data-add=\"${safe(product.id)}\">${safe(product.addLabel || this.labels.add)}</button>`}\n        </div>`\n        }\n      </article>`,\n        )\n        .join(\"\")}</div>`;\n      if (!summary || products.length < 2) return cards;\n      return `<div class=\"recommendations-carousel\">${cards}<div class=\"recommendation-nav\" role=\"group\" aria-label=\"${safe(this.labels.products)}\"><button type=\"button\" data-carousel-step=\"-1\" aria-label=\"${safe(this.labels.previousProducts)}\">←</button><button type=\"button\" data-carousel-step=\"1\" aria-label=\"${safe(this.labels.nextProducts)}\">→</button></div></div>`;\n    }\n\n    statusMarkup(cards = []) {\n      return cards.length\n        ? `<div class=\"status-cards\">${cards.map((card) => `<article class=\"status-card\" part=\"card status-card\"><small>${safe(card.kind === \"order_tracking\" ? this.labels.shipping : this.labels.order)}</small><h3>${safe(card.title || card.order_number || card.id)}</h3><p>${safe(card.message || card.status || \"\")}</p>${card.tracking_code ? `<strong>${safe(card.tracking_code)}</strong>` : \"\"}${card.estimated_delivery ? `<time>${safe(card.estimated_delivery)}</time>` : \"\"}</article>`).join(\"\")}</div>`\n        : \"\";\n    }\n\n    actionMarkup(actions = []) {\n      return actions.length\n        ? `<div class=\"message-actions\">${actions.map((action) => `<a part=\"action standalone-action\" href=\"${safe(action.url)}\" target=\"_blank\" rel=\"noopener noreferrer\" data-action-url=\"${safe(action.url)}\">${safe(action.label)} <span aria-hidden=\"true\">↗</span></a>`).join(\"\")}</div>`\n        : \"\";\n    }\n\n    quickMarkup(items = []) {\n      return items.length\n        ? `<div class=\"quick\">${items\n            .map((item) => {\n              const label = typeof item === \"string\" ? item : item?.label;\n              const value = typeof item === \"string\" ? item : item?.value;\n              return label && value\n                ? `<button type=\"button\" data-quick=\"${safe(value)}\">${safe(label)}</button>`\n                : \"\";\n            })\n            .join(\"\")}</div>`\n        : \"\";\n    }\n\n    feedbackMarkup(message, index) {\n      if (!message.executionId || !this.configured) return \"\";\n      return `<div class=\"feedback\" aria-label=\"${safe(this.labels.feedback)}\">\n        <span>${safe(this.labels.feedback)}</span>\n        <button type=\"button\" data-feedback=\"1\" data-message-index=\"${index}\" aria-label=\"${safe(this.labels.helpful)}\" aria-pressed=\"${message.feedback === 1}\">${THUMB_UP_ICON}</button>\n        <button type=\"button\" data-feedback=\"-1\" data-message-index=\"${index}\" aria-label=\"${safe(this.labels.notHelpful)}\" aria-pressed=\"${message.feedback === -1}\">${THUMB_DOWN_ICON}</button>\n      </div>`;\n    }\n\n    scroll(target = \"bottom\") {\n      requestAnimationFrame(() => {\n        const area = this.root.querySelector(\".conversation\");\n        if (!area) return;\n        if (target === \"message\") {\n          const message = area.querySelector(\".messages .message:last-child\");\n          area.scrollTop = message ? Math.max(0, message.offsetTop - 8) : area.scrollHeight;\n          return;\n        }\n        area.scrollTop = area.scrollHeight;\n      });\n    }\n\n    compactStyles() {\n      return `\n        .panel {\n          width: min(396px, calc(100vw - 32px));\n          height: min(640px, calc(100dvh - 48px));\n          grid-template-rows: auto minmax(0, 1fr) repeat(3, auto);\n        }\n        .panel header { min-height: 64px; padding-block: 11px; }\n        .panel-actions { gap: 3px !important; }\n        .panel-actions button {\n          width: 36px;\n          height: 36px;\n          padding: 0;\n          border: 0;\n          background: transparent;\n          color: #fff;\n          cursor: pointer;\n          line-height: 1;\n        }\n        .new-chat { font-size: 24px; font-weight: 300; }\n        .close { font-size: 28px; }\n        .launcher i svg { width: 21px; height: 21px; fill: none; stroke: currentColor; stroke-width: 1.7; }\n        .conversation { padding-inline: 14px; }\n        .welcome-message { margin-top: 0; padding: 0 0 12px; border: 0; text-align: left; }\n        .welcome-message > div > p { color: var(--pt-chat-text, #171715); }\n        .message > p,\n        .message.assistant > div > p { font-size: 12px; }\n        .recommendations-list { gap: 8px; }\n        .recommendation {\n          position: relative;\n          grid-template-columns: 74px minmax(0, 1fr);\n          gap: 8px 10px;\n          padding: 9px;\n        }\n        .recommendation-image {\n          width: 74px;\n          height: 96px;\n        }\n        .recommendation h3 { margin-top: 2px; font-size: 13px; line-height: 1.22; }\n        .recommendation h3 .product-title {\n          display: -webkit-box;\n          overflow: hidden;\n          min-height: calc(2 * 1.22em);\n          -webkit-box-orient: vertical;\n          -webkit-line-clamp: 2;\n          line-clamp: 2;\n        }\n        .price { display: flex; align-items: baseline; gap: 7px; }\n        .price del { color: var(--pt-chat-muted, #68655f); font-size: 9px; }\n        .recommendation-copy > p {\n          display: -webkit-box;\n          overflow: hidden;\n          margin-top: 5px;\n          -webkit-box-orient: vertical;\n          -webkit-line-clamp: 2;\n          line-clamp: 2;\n        }\n        .recommendation-actions {\n          grid-column: 1 / -1;\n          display: grid;\n          grid-template-columns: 0.8fr 1.2fr;\n          gap: 7px;\n        }\n        .recommendation-actions button {\n          grid-column: auto;\n          min-height: 31px;\n        }\n        .recommendations-list.is-summary {\n          display: flex;\n          align-items: stretch;\n          gap: 9px;\n          overflow-x: auto;\n          overscroll-behavior-inline: contain;\n          padding: 0 1px 7px;\n          scroll-snap-type: inline mandatory;\n          scrollbar-width: none;\n        }\n        .recommendations-list.is-summary::-webkit-scrollbar { display: none; }\n        .recommendations-list.is-summary .recommendation {\n          flex: 0 0 min(72%, 250px);\n          scroll-snap-align: start;\n        }\n        .recommendations-list.is-summary .recommendation-copy > p { display: none; }\n        .product-add-trigger {\n          position: absolute;\n          top: 78px;\n          left: 56px;\n          z-index: 1;\n          display: grid;\n          width: 26px;\n          height: 26px;\n          place-items: center;\n          border: 0;\n          background: var(--pt-chat-surface, #fff);\n          color: var(--pt-chat-text, #171715);\n          box-shadow: 0 1px 5px rgba(0, 0, 0, .12);\n          font: 300 19px/1 inherit;\n          cursor: pointer;\n        }\n        .product-add-trigger:focus-visible { outline: 1px solid var(--pt-accent); outline-offset: 1px; }\n        .recommendation-nav {\n          display: flex;\n          justify-content: flex-end;\n          gap: 6px;\n          margin-top: 6px;\n        }\n        .recommendation-nav button {\n          width: 32px;\n          height: 32px;\n          border: 1px solid var(--pt-chat-border, #d7d2c9);\n          background: var(--pt-chat-surface, #fff);\n          color: var(--pt-chat-text, #171715);\n          font: 400 17px/1 inherit;\n          cursor: pointer;\n        }\n        .recommendation-nav button:disabled { cursor: default; opacity: .28; }\n        .recommendation-nav button:focus-visible { outline: 2px solid var(--pt-accent); outline-offset: 2px; }\n        .message-actions { display: grid; gap: 7px; margin-top: 8px; }\n        .message-actions a {\n          min-height: 38px;\n          display: flex;\n          align-items: center;\n          justify-content: space-between;\n          gap: 10px;\n          padding: 9px 12px;\n          border: 1px solid var(--pt-accent);\n          background: var(--pt-accent);\n          color: #fff;\n          font: 600 10px/1.3 inherit;\n          letter-spacing: .05em;\n          text-decoration: none;\n          text-transform: uppercase;\n        }\n        .message-actions a:hover { filter: brightness(1.08); }\n        .message-actions a:focus-visible { outline: 2px solid var(--pt-accent); outline-offset: 2px; }\n        .variants { grid-column: 1 / -1; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 6px; }\n        .variants label { display: grid; gap: 3px; color: #77736c; font-size: 8px; text-transform: uppercase; letter-spacing: .08em; }\n        .variants select, .variant-locked { min-width: 0; height: 31px; border: 1px solid var(--pt-chat-border, #d7d2c9); background: var(--pt-chat-surface, #fff); color: var(--pt-chat-text, #171715); padding: 0 6px; font: 10px inherit; }\n        .variant-locked { display: flex; align-items: center; color: var(--pt-chat-muted, #68655f); }\n        .color-picker { grid-column: span 2; }\n        .swatch-value { color: inherit; font: inherit; }\n        .color-swatches { display: flex; flex-wrap: wrap; gap: 8px; padding-block: 3px; }\n        .color-swatches button { width: 23px; height: 23px; padding: 0; border: 1px solid #aaa59d; border-radius: 50%; background: var(--swatch); cursor: pointer; box-shadow: inset 0 0 0 2px var(--pt-chat-surface, #fff); }\n        .color-swatches button[aria-pressed=\"true\"] { outline: 1px solid var(--pt-chat-text, #171715); outline-offset: 2px; }\n        .status-cards { display: grid; gap: 8px; margin-top: 10px; }\n        .status-card { display: grid; gap: 5px; padding: 12px; border: 1px solid var(--pt-chat-border, #d7d2c9); background: var(--pt-chat-surface, #fff); }\n        .status-card small { color: var(--pt-chat-muted, #68655f); text-transform: uppercase; letter-spacing: .1em; font-size: 8px; }\n        .status-card h3, .status-card p { margin: 0; }\n        .status-card h3 { font: 400 16px/1.2 Georgia, serif; }\n        .status-card p, .status-card time { color: var(--pt-chat-muted, #68655f); font-size: 10px; }\n        .offline { margin: 8px 0; border: 1px solid #d8a52f; background: #fff8df; padding: 9px; color: #59420c; font-size: 10px; }\n        .typing { position: relative; width: fit-content; max-width: calc(100% - 40px); min-height: 34px; padding: 9px 11px; border: 1px solid var(--pt-chat-border, #d7d2c9); background: var(--pt-chat-surface, #fff); }\n        .typing::after { position: absolute; right: 0; bottom: -1px; left: 0; height: 2px; content: \"\"; background: linear-gradient(90deg, transparent, var(--pt-accent), transparent); background-size: 200% 100%; animation: activity-progress 1.4s linear infinite; }\n        .typing em { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n        .typing time { flex: 0 0 auto; margin-left: 7px; color: var(--pt-chat-muted, #68655f); font: 600 8px/1 inherit; letter-spacing: .04em; }\n        .typing.is-finalizing span { background: #54825a; }\n        @keyframes activity-progress { to { background-position: -200% 0; } }\n        button:focus-visible, select:focus-visible { outline: 2px solid color-mix(in srgb, var(--pt-accent) 70%, white); outline-offset: 2px; }\n        .composer:focus-within { border-color: var(--pt-accent); }\n        .composer textarea:focus-visible { outline: none; }\n        .composer textarea { min-height: 47px; padding-block: 14px; }\n        .cart-drawer-backdrop { position: absolute; inset: 0; z-index: 6; border: 0; background: rgba(17, 17, 15, .38); cursor: default; }\n        .cart-drawer {\n          position: absolute;\n          right: 0;\n          bottom: 0;\n          left: 0;\n          z-index: 7;\n          max-height: min(72%, 470px);\n          overflow-y: auto;\n          border-top: 1px solid var(--pt-chat-border, #d7d2c9);\n          background: var(--pt-chat-surface, #fff);\n          padding: 8px 18px 18px;\n          box-shadow: 0 -18px 45px rgba(0, 0, 0, .16);\n        }\n        .cart-drawer-handle { width: 42px; height: 3px; margin: 0 auto 12px; background: var(--pt-chat-border, #d7d2c9); }\n        .cart-drawer-header { display: flex; align-items: start; justify-content: space-between; gap: 16px; }\n        .cart-drawer-header small { color: var(--pt-chat-muted, #68655f); font-size: 8px; letter-spacing: .1em; text-transform: uppercase; }\n        .cart-drawer-header h3 { margin: 3px 0 0; font: 500 14px/1.3 inherit; }\n        .cart-drawer-header > button { flex: 0 0 auto; width: 36px; height: 36px; border: 0; background: transparent; color: inherit; font: 300 28px/1 inherit; cursor: pointer; }\n        .cart-drawer fieldset { min-width: 0; margin: 18px 0 0; padding: 0; border: 0; }\n        .cart-drawer legend, .drawer-quantity > span { margin-bottom: 8px; color: var(--pt-chat-text, #171715); font: 600 10px/1 inherit; letter-spacing: .08em; text-transform: uppercase; }\n        .drawer-options { display: grid; grid-template-columns: repeat(auto-fit, minmax(52px, 1fr)); }\n        .drawer-options button { min-height: 44px; border: 1px solid var(--pt-chat-border, #d7d2c9); border-right: 0; background: #fff; color: inherit; font: 500 11px/1 inherit; cursor: pointer; }\n        .drawer-options button:last-child { border-right: 1px solid var(--pt-chat-border, #d7d2c9); }\n        .drawer-options button[aria-pressed=\"true\"] { background: var(--pt-accent); color: #fff; }\n        .drawer-colors button { display: flex; align-items: center; justify-content: center; gap: 7px; }\n        .drawer-colors i { width: 14px; height: 14px; border: 1px solid #aaa59d; border-radius: 50%; background: var(--swatch); }\n        .drawer-quantity { display: grid; width: 92px; margin-top: 18px; }\n        .drawer-quantity select { height: 42px; border: 1px solid var(--pt-chat-border, #d7d2c9); background: #fff; padding: 0 10px; color: inherit; font: 12px inherit; }\n        .drawer-add { width: 100%; min-height: 46px; margin-top: 18px; border: 1px solid var(--pt-accent); background: var(--pt-accent); color: #fff; font: 600 10px/1 inherit; letter-spacing: .1em; text-transform: uppercase; cursor: pointer; }\n        .drawer-add:disabled { cursor: not-allowed; opacity: .45; }\n        .legal-consent { margin: 0 14px 8px; border: 1px solid var(--pt-chat-border, #d7d2c9); background: var(--pt-chat-surface, #fff); padding: 11px; }\n        .legal-consent p { margin: 0 0 9px; color: var(--pt-chat-muted, #68655f); font-size: 9px; line-height: 1.45; }\n        .legal-consent a { color: var(--pt-chat-text, #171715); text-underline-offset: 2px; }\n        .legal-consent button { width: 100%; min-height: 34px; border: 1px solid var(--pt-accent); background: var(--pt-accent); color: #fff; cursor: pointer; font: 600 9px/1 inherit; letter-spacing: .08em; text-transform: uppercase; }\n        .legal-summary { margin: -2px 14px 8px; color: var(--pt-chat-muted, #68655f); font-size: 8px; line-height: 1.4; text-align: center; }\n        .legal-summary a { color: var(--pt-chat-text, #171715); text-underline-offset: 2px; }\n        .feedback { display: flex; align-items: center; justify-content: flex-end; gap: 5px; margin-top: 7px; color: #77736c; font-size: 9px; }\n        .feedback button { display: grid; place-items: center; width: 27px; height: 27px; padding: 0; border: 1px solid #d7d2c9; border-radius: 50%; background: #fff; color: #77736c; cursor: pointer; }\n        .feedback button svg { width: 14px; height: 14px; fill: none; stroke: currentColor; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.5; }\n        .feedback button[aria-pressed=\"true\"] { border-color: #171715; background: #ebe7df; color: #171715; }\n        @media (max-width: 560px) {\n          .panel {\n            position: fixed !important;\n            inset: 0 !important;\n            width: 100vw !important;\n            height: 100dvh !important;\n            max-height: 100dvh !important;\n            border: 0 !important;\n            box-shadow: none !important;\n          }\n          .panel header {\n            min-height: calc(60px + env(safe-area-inset-top));\n            padding: calc(10px + env(safe-area-inset-top)) max(16px, env(safe-area-inset-right)) 10px max(16px, env(safe-area-inset-left));\n          }\n          .panel header strong { font-size: 14px; }\n          .panel-actions button { width: 44px; height: 44px; }\n          .conversation {\n            padding: 16px max(16px, env(safe-area-inset-right)) 18px max(16px, env(safe-area-inset-left));\n            -webkit-overflow-scrolling: touch;\n          }\n          .quick { gap: 8px; }\n          .quick.initial { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); padding: 0 0 16px; }\n          .quick button { min-height: 44px; }\n          .variants { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }\n          .variants select, .variant-locked { height: 44px; padding-inline: 10px; }\n          .recommendation-actions button { min-height: 44px; }\n          .composer {\n            margin: 0 max(12px, env(safe-area-inset-right)) 8px max(12px, env(safe-area-inset-left));\n            grid-template-columns: minmax(0, 1fr) 52px;\n          }\n          .composer textarea { min-height: 56px; max-height: 112px; padding: 17px 14px; }\n          .composer button { width: 44px; height: 44px; margin: 0 5px 6px 0; }\n          .cart-drawer { position: fixed; max-height: 66%; padding: 6px max(16px, env(safe-area-inset-right)) max(16px, calc(8px + env(safe-area-inset-bottom))) max(16px, env(safe-area-inset-left)); }\n          .cart-drawer-handle { margin-bottom: 8px; }\n          .cart-drawer-header h3 { font-size: 12px; }\n          .cart-drawer fieldset { margin-top: 11px; }\n          .drawer-options button { min-height: 40px; font-size: 11px; }\n          .drawer-quantity { margin-top: 11px; }\n          .drawer-quantity select { height: 38px; }\n          .drawer-add { min-height: 44px; margin-top: 12px; font-size: 10px; }\n          .legal-summary { margin-inline: 16px; font-size: 9px; }\n          .panel > footer { padding-bottom: max(10px, env(safe-area-inset-bottom)); font-size: 9px; }\n          .composer textarea, .variants select {\n            font-size: 16px;\n          }\n        }\n      `;\n    }\n\n    styles(accent) {\n      return `:host{--pt-accent:var(--pt-chat-accent,${safe(accent)});position:fixed;right:var(--pt-chat-right,24px);bottom:var(--pt-chat-bottom,24px);z-index:var(--pt-chat-z-index,2147483000);font-family:var(--pt-chat-font-family,Inter,-apple-system,BlinkMacSystemFont,\"Segoe UI\",sans-serif);color:var(--pt-chat-text,#171715);line-height:1.45;contain:style;-webkit-text-size-adjust:100%;text-size-adjust:100%}:host *{box-sizing:border-box;min-width:0}[hidden]{display:none!important}.sr-only{position:absolute;width:1px;height:1px;clip:rect(0,0,0,0);overflow:hidden}.launcher{width:230px;min-height:64px;border:0;border-radius:2px;background:var(--pt-accent);color:#fff;display:flex;align-items:center;gap:12px;padding:10px 14px;box-shadow:0 15px 42px rgba(0,0,0,.25);cursor:pointer;text-align:left}.launcher-mark,.avatar,.mini-avatar{display:grid;place-items:center;border:1px solid currentColor;font-family:Georgia,serif}.launcher-mark{width:36px;height:36px;font-size:20px}.launcher span:nth-child(2){display:grid;flex:1}.launcher strong{font:600 12px/1.3 inherit;letter-spacing:.02em}.launcher small{font-size:10px;color:rgba(255,255,255,.65)}.launcher i{font-style:normal;font-size:20px}.panel{position:absolute;right:0;bottom:0;width:min(420px,calc(100vw - 32px));height:min(680px,calc(100dvh - 48px));max-height:calc(100dvh - 48px);background:#f7f5f0;border:1px solid #d7d2c9;box-shadow:0 24px 70px rgba(0,0,0,.27);display:none;grid-template-rows:auto minmax(0,1fr) auto auto;overflow:hidden}.panel.is-open{display:grid}.panel header{background:var(--pt-accent);color:#fff;min-height:72px;padding:13px 17px;display:flex;justify-content:space-between;align-items:center}.panel header>div{display:flex;gap:12px;align-items:center}.avatar{width:38px;height:38px;font-size:20px}.panel header p{display:grid;margin:0}.panel header strong{font-family:Georgia,serif;font-size:16px;font-weight:400}.panel header small{font-size:10px;color:rgba(255,255,255,.68);margin-top:3px}.panel header small i{display:inline-block;width:6px;height:6px;border-radius:50%;background:#87bd8b;margin-right:4px}.close{border:0;background:transparent;color:#fff;font-size:29px;line-height:1;cursor:pointer}.conversation{min-height:0;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;padding:22px 18px 14px;scrollbar-width:thin}.conversation.has-messages{padding-top:8px}.conversation.has-messages .welcome,.conversation.has-messages .quick.initial{display:none}.welcome{text-align:center;border-bottom:1px solid #dfdbd3;padding:4px 15px 20px}.welcome-mark{display:grid;place-items:center;margin:0 auto 11px;border:1px solid #171715;width:40px;height:40px;font:22px Georgia,serif}.welcome h2{font:400 27px/1.1 Georgia,serif;margin:0 0 9px}.welcome p{font-size:12px;color:#65635f;margin:0}.quick{display:flex;flex-wrap:wrap;gap:7px;margin-top:12px}.quick.initial{justify-content:center;padding:4px 0 15px}.quick button{border:1px solid #cbc6bd;background:#fff;border-radius:20px;padding:8px 11px;font:500 10px inherit;cursor:pointer;color:#3c3b38}.quick button:hover{border-color:#171715}.message{margin:12px 0;overflow-wrap:anywhere}.message>p,.message.assistant>div>p{margin:0;padding:12px 14px;font-size:13px;white-space:pre-line}.message.user{display:flex;justify-content:flex-end}.message.user>p{background:var(--pt-accent);color:#fff;max-width:82%;border-radius:13px 13px 2px 13px}.message.assistant{display:grid;grid-template-columns:25px minmax(0,1fr);gap:8px;align-items:start}.message.assistant>div>p{background:#fff;border:1px solid #e0dcd4;border-radius:2px 13px 13px 13px}.mini-avatar{width:25px;height:25px;font:13px Georgia,serif}.recommendations-list{display:grid;gap:10px;margin-top:10px}.recommendation{background:#fff;border:1px solid #dcd7ce;padding:10px;display:grid;grid-template-columns:86px minmax(0,1fr);gap:9px}.recommendation-image{width:86px;height:112px;background-repeat:no-repeat;background-color:#ddd6cc}.product-image-link{display:block;grid-column:auto;min-height:0;padding:0;border:0;border-radius:0;appearance:none}.recommendation h3{font:400 16px/1.15 Georgia,serif;margin:3px 0}.product-title{display:block;width:100%;min-height:0;border:0;background:transparent;color:inherit;padding:0;font:inherit;line-height:inherit;letter-spacing:inherit;text-align:left;text-transform:none;white-space:normal;overflow-wrap:break-word;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;cursor:pointer}.recommendation small{font-size:8px;text-transform:uppercase;letter-spacing:.1em;color:#77736c}.recommendation strong{font-size:11px}.recommendation-copy>p{font-size:10px;color:#68655f;margin:7px 0 0}.recommendation-actions button{grid-column:auto;min-height:34px;text-transform:uppercase;font:600 9px inherit;letter-spacing:.08em;cursor:pointer}.recommendation .view{background:#fff;border:1px solid #171715}.recommendation .add{background:#171715;color:#fff;border:1px solid #171715}.typing{display:flex;align-items:center;gap:4px;margin:16px 0 10px 33px}.typing span{width:6px;height:6px;border-radius:50%;background:#777;animation:pulse 1.1s infinite}.typing span:nth-child(2){animation-delay:.15s}.typing span:nth-child(3){animation-delay:.3s}.typing em{font:normal 9px inherit;color:#777;margin-left:5px}.typing[hidden]{display:none}@keyframes pulse{0%,60%,100%{opacity:.3;transform:translateY(0)}30%{opacity:1;transform:translateY(-3px)}}.composer{margin:0 14px 10px;border:1px solid #c9c4bb;background:#fff;display:grid;grid-template-columns:minmax(0,1fr) 41px;align-items:end}.composer textarea{width:100%;resize:none;border:0;outline:0;min-height:51px;max-height:90px;padding:16px 12px;background:transparent;font:13px inherit}.composer button{width:34px;height:34px;margin:0 6px 8px 0;border:0;border-radius:50%;background:var(--pt-accent);color:#fff;font-size:19px;cursor:pointer}.panel>footer{text-align:center;padding:0 10px 10px;color:#969188;text-transform:uppercase;font-size:8px;letter-spacing:.13em}.panel>footer span{color:#171715;font-size:11px}@media(max-width:560px){:host{right:12px;bottom:12px}.launcher{width:58px;height:58px;min-height:58px;padding:10px;border-radius:50%}.launcher span:nth-child(2),.launcher i{display:none}.launcher-mark{border:0}.panel{position:fixed!important;inset:max(8px,env(safe-area-inset-top)) 8px max(8px,env(safe-area-inset-bottom))!important;width:calc(100vw - 16px)!important;min-width:0!important;max-width:calc(100vw - 16px)!important;height:calc(100dvh - 16px)!important;max-height:calc(100dvh - 16px)!important;border:1px solid #d7d2c9}.conversation{padding-left:14px;padding-right:14px}.composer textarea,.variants select{font-size:16px}}@media(max-height:620px){.panel header{min-height:60px;padding-top:9px;padding-bottom:9px}.conversation{padding-top:10px}.welcome-mark{display:none}.welcome h2{font-size:23px}.welcome{padding-top:0;padding-bottom:12px}.quick.initial{padding-bottom:8px}.composer{margin-bottom:7px}.panel>footer{padding-bottom:7px}}:host{--pt-chat-background:#f7f5f0;--pt-chat-surface:#fff;--pt-chat-border:#d7d2c9;--pt-chat-muted:#68655f;--pt-chat-radius:0px}.panel{background:var(--pt-chat-background);border-color:var(--pt-chat-border);border-radius:var(--pt-chat-radius)}.message.assistant>div>p,.recommendation,.quick button,.composer{background:var(--pt-chat-surface)}.message.assistant>div>p,.recommendation,.quick button,.composer{border-color:var(--pt-chat-border)}.recommendation-copy>p,.welcome p{color:var(--pt-chat-muted)}.recommendation .add{background:var(--pt-chat-text,#171715);border-color:var(--pt-chat-text,#171715);color:var(--pt-chat-surface,#fff)}@media(prefers-reduced-motion:reduce){.typing span{animation:none}}`;\n    }\n  }\n\n  customElements.define(TAG, PromptRailsShopAssistant);\n})();\n"]}