{"version":3,"file":"js/709-821efff6ace1c7867e39.js","mappings":";sSACAA,EAAA,kBAAAC,CAAA,MAAAC,EAAAD,EAAA,GAAAE,EAAAC,OAAAC,UAAAC,EAAAH,EAAAI,eAAAC,EAAAJ,OAAAK,gBAAA,SAAAP,EAAAD,EAAAE,GAAAD,EAAAD,GAAAE,EAAAO,KAAA,EAAAC,EAAA,mBAAAC,OAAAA,OAAA,GAAAC,EAAAF,EAAAG,UAAA,aAAAC,EAAAJ,EAAAK,eAAA,kBAAAC,EAAAN,EAAAO,aAAA,yBAAAC,EAAAjB,EAAAD,EAAAE,GAAA,OAAAC,OAAAK,eAAAP,EAAAD,EAAA,CAAAS,MAAAP,EAAAiB,YAAA,EAAAC,cAAA,EAAAC,UAAA,IAAApB,EAAAD,EAAA,KAAAkB,EAAA,aAAAjB,GAAAiB,EAAA,SAAAjB,EAAAD,EAAAE,GAAA,OAAAD,EAAAD,GAAAE,CAAA,WAAAoB,EAAArB,EAAAD,EAAAE,EAAAG,GAAA,IAAAK,EAAAV,GAAAA,EAAAI,qBAAAmB,EAAAvB,EAAAuB,EAAAX,EAAAT,OAAAqB,OAAAd,EAAAN,WAAAU,EAAA,IAAAW,EAAApB,GAAA,WAAAE,EAAAK,EAAA,WAAAH,MAAAiB,EAAAzB,EAAAC,EAAAY,KAAAF,CAAA,UAAAe,EAAA1B,EAAAD,EAAAE,GAAA,WAAA0B,KAAA,SAAAC,IAAA5B,EAAA6B,KAAA9B,EAAAE,GAAA,OAAAD,GAAA,OAAA2B,KAAA,QAAAC,IAAA5B,EAAA,EAAAD,EAAAsB,KAAAA,EAAA,IAAAS,EAAA,iBAAAC,EAAA,iBAAAC,EAAA,YAAAC,EAAA,YAAAC,EAAA,YAAAZ,IAAA,UAAAa,IAAA,UAAAC,IAAA,KAAAC,EAAA,GAAApB,EAAAoB,EAAA1B,GAAA,8BAAA2B,EAAApC,OAAAqC,eAAAC,EAAAF,GAAAA,EAAAA,EAAAG,EAAA,MAAAD,GAAAA,IAAAvC,GAAAG,EAAAyB,KAAAW,EAAA7B,KAAA0B,EAAAG,GAAA,IAAAE,EAAAN,EAAAjC,UAAAmB,EAAAnB,UAAAD,OAAAqB,OAAAc,GAAA,SAAAM,EAAA3C,GAAA,0BAAA4C,SAAA,SAAA7C,GAAAkB,EAAAjB,EAAAD,GAAA,SAAAC,GAAA,YAAA6C,QAAA9C,EAAAC,EAAA,gBAAA8C,EAAA9C,EAAAD,GAAA,SAAAgD,EAAA9C,EAAAK,EAAAG,EAAAE,GAAA,IAAAE,EAAAa,EAAA1B,EAAAC,GAAAD,EAAAM,GAAA,aAAAO,EAAAc,KAAA,KAAAZ,EAAAF,EAAAe,IAAAE,EAAAf,EAAAP,MAAA,OAAAsB,GAAA,iBAAAA,GAAA1B,EAAAyB,KAAAC,EAAA,WAAA/B,EAAAiD,QAAAlB,EAAAmB,SAAAC,MAAA,SAAAlD,GAAA+C,EAAA,OAAA/C,EAAAS,EAAAE,EAAA,aAAAX,GAAA+C,EAAA,QAAA/C,EAAAS,EAAAE,EAAA,IAAAZ,EAAAiD,QAAAlB,GAAAoB,MAAA,SAAAlD,GAAAe,EAAAP,MAAAR,EAAAS,EAAAM,EAAA,aAAAf,GAAA,OAAA+C,EAAA,QAAA/C,EAAAS,EAAAE,EAAA,IAAAA,EAAAE,EAAAe,IAAA,KAAA3B,EAAAK,EAAA,gBAAAE,MAAA,SAAAR,EAAAI,GAAA,SAAA+C,IAAA,WAAApD,GAAA,SAAAA,EAAAE,GAAA8C,EAAA/C,EAAAI,EAAAL,EAAAE,EAAA,WAAAA,EAAAA,EAAAA,EAAAiD,KAAAC,EAAAA,GAAAA,GAAA,aAAA1B,EAAA1B,EAAAE,EAAAG,GAAA,IAAAE,EAAAwB,EAAA,gBAAArB,EAAAE,GAAA,GAAAL,IAAA0B,EAAA,MAAAoB,MAAA,mCAAA9C,IAAA2B,EAAA,cAAAxB,EAAA,MAAAE,EAAA,OAAAH,MAAAR,EAAAqD,MAAA,OAAAjD,EAAAkD,OAAA7C,EAAAL,EAAAwB,IAAAjB,IAAA,KAAAE,EAAAT,EAAAmD,SAAA,GAAA1C,EAAA,KAAAE,EAAAyC,EAAA3C,EAAAT,GAAA,GAAAW,EAAA,IAAAA,IAAAmB,EAAA,gBAAAnB,CAAA,cAAAX,EAAAkD,OAAAlD,EAAAqD,KAAArD,EAAAsD,MAAAtD,EAAAwB,SAAA,aAAAxB,EAAAkD,OAAA,IAAAhD,IAAAwB,EAAA,MAAAxB,EAAA2B,EAAA7B,EAAAwB,IAAAxB,EAAAuD,kBAAAvD,EAAAwB,IAAA,gBAAAxB,EAAAkD,QAAAlD,EAAAwD,OAAA,SAAAxD,EAAAwB,KAAAtB,EAAA0B,EAAA,IAAAK,EAAAX,EAAA3B,EAAAE,EAAAG,GAAA,cAAAiC,EAAAV,KAAA,IAAArB,EAAAF,EAAAiD,KAAApB,EAAAF,EAAAM,EAAAT,MAAAM,EAAA,gBAAA1B,MAAA6B,EAAAT,IAAAyB,KAAAjD,EAAAiD,KAAA,WAAAhB,EAAAV,OAAArB,EAAA2B,EAAA7B,EAAAkD,OAAA,QAAAlD,EAAAwB,IAAAS,EAAAT,IAAA,YAAA4B,EAAAzD,EAAAE,GAAA,IAAAG,EAAAH,EAAAqD,OAAAhD,EAAAP,EAAAa,SAAAR,GAAA,GAAAE,IAAAN,EAAA,OAAAC,EAAAsD,SAAA,eAAAnD,GAAAL,EAAAa,SAAA,SAAAX,EAAAqD,OAAA,SAAArD,EAAA2B,IAAA5B,EAAAwD,EAAAzD,EAAAE,GAAA,UAAAA,EAAAqD,SAAA,WAAAlD,IAAAH,EAAAqD,OAAA,QAAArD,EAAA2B,IAAA,IAAAiC,UAAA,oCAAAzD,EAAA,aAAA8B,EAAA,IAAAzB,EAAAiB,EAAApB,EAAAP,EAAAa,SAAAX,EAAA2B,KAAA,aAAAnB,EAAAkB,KAAA,OAAA1B,EAAAqD,OAAA,QAAArD,EAAA2B,IAAAnB,EAAAmB,IAAA3B,EAAAsD,SAAA,KAAArB,EAAA,IAAAvB,EAAAF,EAAAmB,IAAA,OAAAjB,EAAAA,EAAA0C,MAAApD,EAAAF,EAAA+D,YAAAnD,EAAAH,MAAAP,EAAA8D,KAAAhE,EAAAiE,QAAA,WAAA/D,EAAAqD,SAAArD,EAAAqD,OAAA,OAAArD,EAAA2B,IAAA5B,GAAAC,EAAAsD,SAAA,KAAArB,GAAAvB,GAAAV,EAAAqD,OAAA,QAAArD,EAAA2B,IAAA,IAAAiC,UAAA,oCAAA5D,EAAAsD,SAAA,KAAArB,EAAA,UAAA+B,EAAAjE,GAAA,IAAAD,EAAA,CAAAmE,OAAAlE,EAAA,SAAAA,IAAAD,EAAAoE,SAAAnE,EAAA,SAAAA,IAAAD,EAAAqE,WAAApE,EAAA,GAAAD,EAAAsE,SAAArE,EAAA,SAAAsE,WAAAC,KAAAxE,EAAA,UAAAyE,EAAAxE,GAAA,IAAAD,EAAAC,EAAAyE,YAAA,GAAA1E,EAAA4B,KAAA,gBAAA5B,EAAA6B,IAAA5B,EAAAyE,WAAA1E,CAAA,UAAAyB,EAAAxB,GAAA,KAAAsE,WAAA,EAAAJ,OAAA,SAAAlE,EAAA4C,QAAAqB,EAAA,WAAAS,OAAA,YAAAjC,EAAA1C,GAAA,GAAAA,GAAA,KAAAA,EAAA,KAAAE,EAAAF,EAAAY,GAAA,GAAAV,EAAA,OAAAA,EAAA4B,KAAA9B,GAAA,sBAAAA,EAAAgE,KAAA,OAAAhE,EAAA,IAAA4E,MAAA5E,EAAA6E,QAAA,KAAAtE,GAAA,EAAAG,EAAA,SAAAsD,IAAA,OAAAzD,EAAAP,EAAA6E,QAAA,GAAAxE,EAAAyB,KAAA9B,EAAAO,GAAA,OAAAyD,EAAAvD,MAAAT,EAAAO,GAAAyD,EAAAV,MAAA,EAAAU,EAAA,OAAAA,EAAAvD,MAAAR,EAAA+D,EAAAV,MAAA,EAAAU,CAAA,SAAAtD,EAAAsD,KAAAtD,CAAA,YAAAoD,iBAAA9D,EAAA,2BAAAoC,EAAAhC,UAAAiC,EAAA9B,EAAAoC,EAAA,eAAAlC,MAAA4B,EAAAjB,cAAA,IAAAb,EAAA8B,EAAA,eAAA5B,MAAA2B,EAAAhB,cAAA,IAAAgB,EAAA0C,YAAA5D,EAAAmB,EAAArB,EAAA,qBAAAhB,EAAA+E,oBAAA,SAAA9E,GAAA,IAAAD,EAAA,mBAAAC,GAAAA,EAAA+E,YAAA,QAAAhF,IAAAA,IAAAoC,GAAA,uBAAApC,EAAA8E,aAAA9E,EAAAiF,MAAA,EAAAjF,EAAAkF,KAAA,SAAAjF,GAAA,OAAAE,OAAAgF,eAAAhF,OAAAgF,eAAAlF,EAAAoC,IAAApC,EAAAmF,UAAA/C,EAAAnB,EAAAjB,EAAAe,EAAA,sBAAAf,EAAAG,UAAAD,OAAAqB,OAAAmB,GAAA1C,CAAA,EAAAD,EAAAqF,MAAA,SAAApF,GAAA,OAAAiD,QAAAjD,EAAA,EAAA2C,EAAAG,EAAA3C,WAAAc,EAAA6B,EAAA3C,UAAAU,GAAA,0BAAAd,EAAA+C,cAAAA,EAAA/C,EAAAsF,MAAA,SAAArF,EAAAC,EAAAG,EAAAE,EAAAG,QAAA,IAAAA,IAAAA,EAAA6E,SAAA,IAAA3E,EAAA,IAAAmC,EAAAzB,EAAArB,EAAAC,EAAAG,EAAAE,GAAAG,GAAA,OAAAV,EAAA+E,oBAAA7E,GAAAU,EAAAA,EAAAoD,OAAAb,MAAA,SAAAlD,GAAA,OAAAA,EAAAqD,KAAArD,EAAAQ,MAAAG,EAAAoD,MAAA,KAAApB,EAAAD,GAAAzB,EAAAyB,EAAA3B,EAAA,aAAAE,EAAAyB,EAAA/B,GAAA,0BAAAM,EAAAyB,EAAA,qDAAA3C,EAAAwF,KAAA,SAAAvF,GAAA,IAAAD,EAAAG,OAAAF,GAAAC,EAAA,WAAAG,KAAAL,EAAAE,EAAAsE,KAAAnE,GAAA,OAAAH,EAAAuF,UAAA,SAAAzB,IAAA,KAAA9D,EAAA2E,QAAA,KAAA5E,EAAAC,EAAAwF,MAAA,GAAAzF,KAAAD,EAAA,OAAAgE,EAAAvD,MAAAR,EAAA+D,EAAAV,MAAA,EAAAU,CAAA,QAAAA,EAAAV,MAAA,EAAAU,CAAA,GAAAhE,EAAA0C,OAAAA,EAAAjB,EAAArB,UAAA,CAAA4E,YAAAvD,EAAAkD,MAAA,SAAA3E,GAAA,QAAA2F,KAAA,OAAA3B,KAAA,OAAAN,KAAA,KAAAC,MAAA1D,EAAA,KAAAqD,MAAA,OAAAE,SAAA,UAAAD,OAAA,YAAA1B,IAAA5B,EAAA,KAAAsE,WAAA1B,QAAA4B,IAAAzE,EAAA,QAAAE,KAAA,WAAAA,EAAA0F,OAAA,IAAAvF,EAAAyB,KAAA,KAAA5B,KAAA0E,OAAA1E,EAAA2F,MAAA,WAAA3F,GAAAD,EAAA,EAAA6F,KAAA,gBAAAxC,MAAA,MAAArD,EAAA,KAAAsE,WAAA,GAAAG,WAAA,aAAAzE,EAAA2B,KAAA,MAAA3B,EAAA4B,IAAA,YAAAkE,IAAA,EAAAnC,kBAAA,SAAA5D,GAAA,QAAAsD,KAAA,MAAAtD,EAAA,IAAAE,EAAA,cAAA8F,EAAA3F,EAAAE,GAAA,OAAAK,EAAAgB,KAAA,QAAAhB,EAAAiB,IAAA7B,EAAAE,EAAA8D,KAAA3D,EAAAE,IAAAL,EAAAqD,OAAA,OAAArD,EAAA2B,IAAA5B,KAAAM,CAAA,SAAAA,EAAA,KAAAgE,WAAAM,OAAA,EAAAtE,GAAA,IAAAA,EAAA,KAAAG,EAAA,KAAA6D,WAAAhE,GAAAK,EAAAF,EAAAgE,WAAA,YAAAhE,EAAAyD,OAAA,OAAA6B,EAAA,UAAAtF,EAAAyD,QAAA,KAAAwB,KAAA,KAAA7E,EAAAT,EAAAyB,KAAApB,EAAA,YAAAM,EAAAX,EAAAyB,KAAApB,EAAA,iBAAAI,GAAAE,EAAA,SAAA2E,KAAAjF,EAAA0D,SAAA,OAAA4B,EAAAtF,EAAA0D,UAAA,WAAAuB,KAAAjF,EAAA2D,WAAA,OAAA2B,EAAAtF,EAAA2D,WAAA,SAAAvD,GAAA,QAAA6E,KAAAjF,EAAA0D,SAAA,OAAA4B,EAAAtF,EAAA0D,UAAA,YAAApD,EAAA,MAAAqC,MAAA,kDAAAsC,KAAAjF,EAAA2D,WAAA,OAAA2B,EAAAtF,EAAA2D,WAAA,KAAAR,OAAA,SAAA5D,EAAAD,GAAA,QAAAE,EAAA,KAAAqE,WAAAM,OAAA,EAAA3E,GAAA,IAAAA,EAAA,KAAAK,EAAA,KAAAgE,WAAArE,GAAA,GAAAK,EAAA4D,QAAA,KAAAwB,MAAAtF,EAAAyB,KAAAvB,EAAA,oBAAAoF,KAAApF,EAAA8D,WAAA,KAAA3D,EAAAH,EAAA,OAAAG,IAAA,UAAAT,GAAA,aAAAA,IAAAS,EAAAyD,QAAAnE,GAAAA,GAAAU,EAAA2D,aAAA3D,EAAA,UAAAE,EAAAF,EAAAA,EAAAgE,WAAA,UAAA9D,EAAAgB,KAAA3B,EAAAW,EAAAiB,IAAA7B,EAAAU,GAAA,KAAA6C,OAAA,YAAAS,KAAAtD,EAAA2D,WAAAlC,GAAA,KAAA8D,SAAArF,EAAA,EAAAqF,SAAA,SAAAhG,EAAAD,GAAA,aAAAC,EAAA2B,KAAA,MAAA3B,EAAA4B,IAAA,gBAAA5B,EAAA2B,MAAA,aAAA3B,EAAA2B,KAAA,KAAAoC,KAAA/D,EAAA4B,IAAA,WAAA5B,EAAA2B,MAAA,KAAAmE,KAAA,KAAAlE,IAAA5B,EAAA4B,IAAA,KAAA0B,OAAA,cAAAS,KAAA,kBAAA/D,EAAA2B,MAAA5B,IAAA,KAAAgE,KAAAhE,GAAAmC,CAAA,EAAA+D,OAAA,SAAAjG,GAAA,QAAAD,EAAA,KAAAuE,WAAAM,OAAA,EAAA7E,GAAA,IAAAA,EAAA,KAAAE,EAAA,KAAAqE,WAAAvE,GAAA,GAAAE,EAAAmE,aAAApE,EAAA,YAAAgG,SAAA/F,EAAAwE,WAAAxE,EAAAoE,UAAAG,EAAAvE,GAAAiC,CAAA,kBAAAlC,GAAA,QAAAD,EAAA,KAAAuE,WAAAM,OAAA,EAAA7E,GAAA,IAAAA,EAAA,KAAAE,EAAA,KAAAqE,WAAAvE,GAAA,GAAAE,EAAAiE,SAAAlE,EAAA,KAAAI,EAAAH,EAAAwE,WAAA,aAAArE,EAAAuB,KAAA,KAAArB,EAAAF,EAAAwB,IAAA4C,EAAAvE,EAAA,QAAAK,CAAA,QAAA8C,MAAA,0BAAA8C,cAAA,SAAAnG,EAAAE,EAAAG,GAAA,YAAAmD,SAAA,CAAA3C,SAAA6B,EAAA1C,GAAA+D,WAAA7D,EAAA+D,QAAA5D,GAAA,cAAAkD,SAAA,KAAA1B,IAAA5B,GAAAkC,CAAA,GAAAnC,CAAA,UAAAoG,EAAA/F,EAAAJ,EAAAD,EAAAE,EAAAK,EAAAK,EAAAE,GAAA,QAAAJ,EAAAL,EAAAO,GAAAE,GAAAE,EAAAN,EAAAD,KAAA,OAAAJ,GAAA,YAAAL,EAAAK,EAAA,CAAAK,EAAA4C,KAAArD,EAAAe,GAAAuE,QAAAtC,QAAAjC,GAAAmC,KAAAjD,EAAAK,EAAA,UAAA8F,EAAAnG,EAAAF,GAAA,gBAAAE,GAAA,GAAAoG,MAAAC,QAAArG,GAAA,OAAAA,CAAA,CAAAsG,CAAAtG,IAAA,SAAAA,EAAA8B,GAAA,IAAA/B,EAAA,MAAAC,EAAA,yBAAAS,QAAAT,EAAAS,OAAAE,WAAAX,EAAA,uBAAAD,EAAA,KAAAD,EAAAK,EAAAK,EAAAM,EAAAJ,EAAA,GAAAqB,GAAA,EAAA1B,GAAA,SAAAG,GAAAT,EAAAA,EAAA6B,KAAA5B,IAAA8D,KAAA,IAAAhC,EAAA,IAAA7B,OAAAF,KAAAA,EAAA,OAAAgC,GAAA,cAAAA,GAAAjC,EAAAU,EAAAoB,KAAA7B,IAAAqD,QAAA1C,EAAA4D,KAAAxE,EAAAS,OAAAG,EAAAiE,SAAA7C,GAAAC,GAAA,UAAA/B,GAAAK,GAAA,EAAAF,EAAAH,CAAA,iBAAA+B,GAAA,MAAAhC,EAAA,SAAAe,EAAAf,EAAA,SAAAE,OAAAa,KAAAA,GAAA,kBAAAT,EAAA,MAAAF,CAAA,SAAAO,CAAA,EAAA6F,CAAAvG,EAAAF,IAAA,SAAAE,EAAAU,GAAA,GAAAV,EAAA,qBAAAA,EAAA,OAAAwG,EAAAxG,EAAAU,GAAA,IAAAX,EAAA,GAAA0G,SAAA7E,KAAA5B,GAAA2F,MAAA,uBAAA5F,GAAAC,EAAA8E,cAAA/E,EAAAC,EAAA8E,YAAAC,MAAA,QAAAhF,GAAA,QAAAA,EAAAqG,MAAAM,KAAA1G,GAAA,cAAAD,GAAA,2CAAA4G,KAAA5G,GAAAyG,EAAAxG,EAAAU,QAAA,GAAAkG,CAAA5G,EAAAF,IAAA,qBAAA8D,UAAA,6IAAAiD,EAAA,UAAAL,EAAAxG,EAAAU,IAAA,MAAAA,GAAAA,EAAAV,EAAA2E,UAAAjE,EAAAV,EAAA2E,QAAA,QAAA7E,EAAA,EAAAK,EAAAiG,MAAA1F,GAAAZ,EAAAY,EAAAZ,IAAAK,EAAAL,GAAAE,EAAAF,GAAA,OAAAK,CAAA,CAYA,IAAM2G,EAAoB,iBAEpBC,EAAmBC,EAAAA,KAAaC,MAAM,CAC1CC,MAAOF,EAAAA,KAAaG,SAAS,4BAC7BC,SAAUJ,EAAAA,KACPG,SAAS,0BACTE,IAAI,GAAI,0BACRC,IAAI,IAAK,8BAGRC,EAAS,SAACC,GACd,IACEC,EASED,EATFC,QACAC,EAQEF,EARFE,OACAC,EAOEH,EAPFG,SAAQC,EAONJ,EANFK,QAAAA,OAAO,IAAAD,EAAG,GAAEA,EACZE,EAKEN,EALFM,gBACAC,EAIEP,EAJFO,eACAC,EAGER,EAHFQ,UACAC,EAEET,EAFFS,WACAzF,EACEgF,EADFhF,OAGc0F,EAAA/B,GAAdgC,EAAAA,EAAAA,WAAS,GAAK,GADTC,EAAyBF,EAAA,GAAEG,EAA4BH,EAAA,GAEdI,EAAAnC,GAAdgC,EAAAA,EAAAA,WAAS,GAAK,GAAzCI,EAASD,EAAA,GAAEE,EAAYF,EAAA,GACxBG,GAAiBf,GAA6B,IAAnBK,EAE3BW,EAAgB,WAChBC,OAAOC,WAAW,eAADC,OAAgBC,EAAAA,GAAY,QAAOC,QACtDV,GAA6B,GACpBM,OAAOC,WAAW,eAADC,OAAgBG,EAAAA,GAAY,QAAOD,SAC7DV,GAA6B,EAEjC,GAEAY,EAAAA,EAAAA,kBAAgB,WAGd,OAFAP,IACAC,OAAOO,iBAAiB,SAAUR,GAC3B,WACLC,OAAOQ,oBAAoB,SAAUT,EACvC,CACF,GAAG,KAEHO,EAAAA,EAAAA,kBAAgB,WACdT,EAAaJ,EACf,GAAG,CAACA,KAEJgB,EAAAA,EAAAA,YAAU,WAINC,SAASC,KAAKC,MAAMC,UADjBjB,GAAaH,EACe,SAEA,MAEnC,GAAG,CAACG,IAEJ,IAAMkB,GACH/B,GAAUK,EAAiB,EAAC,KAAAc,OAAQd,EAAc,UAAW,GAC5D2B,EAAY,mBACZ3B,EAAiB,IAAMQ,GAAaH,EACtCsB,EAAY,SACH3B,EAAiB,GAAKA,EAAiB,KAChD2B,EAAY,oBAEd,IAAMC,EAAaD,EAAYD,EACzBG,EAAS,GAAAf,OAAMgB,IACnB,UACA9B,GACA,GACD,qBAAAc,OAAoBb,EAAS,KACxB8B,GAAsBvB,GAAcA,GAAgC,IAAnBR,EAEjDgC,EAAyB,SAACC,GAC9B,IAAMC,EAAU,GAAApB,OAAM/B,EAAiB,KAAA+B,OAAImB,GACrCE,EAAcC,eAAeC,QAAQH,IAAe,GAI1D,OAFAE,eAAeE,WAAWJ,GAEnBC,CACT,EAEMI,EAAgB,CACpBlD,SAAWqB,EAEP,GADAsB,EAAuB,aAAevH,EAAO4E,SAEjDF,MAAQuB,EAEJ,GADAsB,EAAuB,UAAYvH,EAAO0E,OAI1CqD,EAAsB,SAACP,EAAKzJ,GAChC,GAAImH,IAAWe,EAAe,CAC5B,IAAMwB,EAAU,GAAApB,OAAM/B,EAAiB,KAAA+B,OAAImB,GAC3CG,eAAeK,QAAQP,EAAY1J,EACrC,CACF,EAyBMkK,EAAY,eArIpBtK,EAqIoBuK,GArIpBvK,EAqIoBN,IAAAmF,MAAG,SAAA2F,EAAOC,GAAU,IAAAC,EAAA,OAAAhL,IAAAuB,MAAA,SAAA0J,GAAA,cAAAA,EAAArF,KAAAqF,EAAAhH,MAAA,OACb,GAAnB+G,EAAgB,CAAC,GAEjBtC,IAAaH,EAAyB,CAAA0C,EAAAhH,KAAA,eAAAgH,EAAAnH,OAAA,SACjCkH,GAAa,WAGlBnD,EAAO,CAADoD,EAAAhH,KAAA,eAAAgH,EAAAnH,OAAA,SACDkH,GAAa,cAAAC,EAAArF,KAAA,EAAAqF,EAAAhH,KAAA,EAIdiD,EAAiBgE,SAASH,EAAY,CAAEI,YAAY,IAAS,KAAD,EAAAF,EAAAhH,KAAA,iBAAAgH,EAAArF,KAAA,GAAAqF,EAAAG,GAAAH,EAAA,SAElED,GAAgBK,EAAAA,EAAAA,IAAeJ,EAAAG,IAAI,eAAAH,EAAAnH,OAAA,SAG9BkH,GAAa,yBAAAC,EAAAlF,OAAA,GAAA+E,EAAA,kBAtJxB,eAAA5K,EAAA,KAAAD,EAAAqL,UAAA,WAAA9F,SAAA,SAAArF,EAAAK,GAAA,IAAAK,EAAAP,EAAAiL,MAAArL,EAAAD,GAAA,SAAAuL,EAAAlL,GAAA+F,EAAAxF,EAAAV,EAAAK,EAAAgL,EAAAC,EAAA,OAAAnL,EAAA,UAAAmL,EAAAnL,GAAA+F,EAAAxF,EAAAV,EAAAK,EAAAgL,EAAAC,EAAA,QAAAnL,EAAA,CAAAkL,OAAA,QAuJG,gBAlBiBE,GAAA,OAAAb,EAAAU,MAAA,KAAAD,UAAA,KAoBZK,EAAc,WAClBhD,GAAa,EACf,EAgBA,OACEiD,EAAAA,cAACC,EAAAA,GAAM,CACLpB,cAAeA,EACfqB,gBAAgB,EAChBC,kBAAkB,EAClBC,iBAAiB,EACjBd,SAAUN,EACV9C,SApEiB,SAACiD,IAEhBlD,GAAWe,EAOXF,EACFC,GAAa,IAKfb,EAASiD,GAGLxC,GACFI,GAAa,IAhBbG,OAAOmD,SAASC,KAAO9D,CAkB3B,IAiDK,SAAC+D,GAAM,OACNP,EAAAA,cAAA,QACE9D,SAAUqE,EAAOC,aACjBC,UAAWC,IAAW,qBAAsB,CAAE5D,UAAAA,KAE9CkD,EAAAA,cAAA,OAAKS,UAAU,mBACbT,EAAAA,cAAA,OAAKS,UAAU,WAAU,oBACzBT,EAAAA,cAAA,OAAKS,UAAU,cAAa,wFAI5BT,EAAAA,cAACW,EAAAA,QAAU,CACTC,UAAU,2BACVC,SAAS,4BACTC,QAASf,KAGbC,EAAAA,cAAA,OAAKS,UAAU,oBACbT,EAAAA,cAAA,OAAKS,UAAU,iBACbT,EAAAA,cAAA,OACES,UAAU,kDACV,cAAY,kBAEXxE,EACC+D,EAAAA,cAAA,KAAGM,KAAM9D,EAAY,iBAAe,kBAAiB,OAC9CuE,EAAAA,iBAAiB,sBAGxB5C,GAGJ6B,EAAAA,cAAA,OAAKS,UAAU,mBACbT,EAAAA,cAACgB,EAAAA,QAAM,CACLC,aAAcV,EAAOW,OAAOzF,MAC5B0F,GAAG,QACHC,WAAYpF,GAAWgB,EACvBqE,cAAY,EACZC,UAAU,QACVhI,KAAK,QACL8C,QAASA,EACTmF,YACGvE,EAA8C,GAA9B,4BAEnBwE,SAAU,SAACnN,GACT,IAAMoN,EAAW,QACjB3C,EAAoB2C,EAAUpN,EAAES,OAChCyL,EAAOmB,cAAcD,EAAUpN,EAAES,MACnC,EACAA,MAAOyL,EAAOxJ,OAAO0E,QAEvBuE,EAAAA,cAAC2B,EAAAA,QAAgB,CACfC,SAAU5F,GAAWgB,EACrB6E,YAAa7E,EACbiE,aAAcV,EAAOW,OAAOvF,SAC5B2F,UAAU,WACV/C,IAAG,aAAAnB,OAAeN,GAClBxD,KAAK,WACLsC,IAAKS,EACLR,IAAK,IACL2F,SAAU,SAACnN,GACT,IAAMoN,EAAW,WACjBlB,EAAOuB,cAAcL,EAAU,MAC/B3C,EAAoB2C,EAAUpN,EAAE0N,OAAOjN,OACvCyL,EAAOmB,cAAcD,EAAUpN,EAAE0N,OAAOjN,MAC1C,EAEAyM,YACGvE,EAEG,GADA,iGAGNlI,MAAOyL,EAAOxJ,OAAO4E,aAI3BqE,EAAAA,cAAA,OAAKS,UAAU,mBACbT,EAAAA,cAAA,UACES,UAAS,2CAAArD,OACPT,EAA4B,SAAW,aAEzC,cAAY,iBACZ,kBArGVqF,EADE/F,IAAWe,EACN,eAEA,kBAETgF,GAAQrF,EAA4B,QAAU,QAC1CG,GAAaH,IACfqF,GAAQ,aAEHA,GA8FKJ,SAAU5E,GAAiBhB,EAC3B/F,KAAK,UAEJgG,GACC+D,EAAAA,cAAA,KACES,UAAU,yCACV,cAAY,cAGfzE,EAAU,eAAiBkC,IAE5BjC,GAAUoC,GACV2B,EAAAA,cAAA,OAAKS,UAAU,mDACZ3D,GAAgC,IAAnBR,GAAwB6B,GACpCrB,GACAkD,EAAAA,cAACiC,EAAAA,QAAc,CAACxB,UAAU,mDAxHhB,IACtBuB,CA6HO,GAIf,EAEAlG,EAAOoG,UAAY,CACjBlG,QAASmG,IAAAA,KACTlG,OAAQkG,IAAAA,KACRjG,SAAUiG,IAAAA,KACV/F,QAAS+F,IAAAA,QACPA,IAAAA,MAAgB,CACd7I,KAAM6I,IAAAA,OACNrN,MAAOqN,IAAAA,UAGX9F,gBAAiB8F,IAAAA,OACjB7F,eAAgB6F,IAAAA,OAAiBC,WACjC7F,UAAW4F,IAAAA,OACX3F,WAAY2F,IAAAA,OACZpL,OAAQoL,IAAAA,QAGVrG,EAAOuG,aAAe,CACpBrG,SAAS,EACTC,QAAQ,EACRC,SAAU,WAAO,EACjBE,QAAS,GACTC,gBAAiB,GACjBE,UAAW,GACXC,WAAY,yBACZzF,OAAQ,CAAC,GAGX,0WCjTA,IAAMuL,EAAiB,SAACvG,GACtB,IACkBwG,EAKdxG,EALFO,eACAL,EAIEF,EAJFE,OACAO,EAGET,EAHFS,WACAgG,EAEEzG,EAFFyG,eACAC,EACE1G,EADF0G,sBAEFC,GACEC,EAAAA,EAAAA,SAAgB,CACdH,eAAAA,EACAC,sBAAAA,EACAxG,OAAAA,EACA2G,aAAa,EACbpG,WAAAA,EACA+F,eAAAA,EACAM,cAAe,mBACfC,QAASC,EAAAA,iBAAiBC,OAC1BC,SAAUC,EAAAA,cAAcF,SAVpBhH,EAAO0G,EAAP1G,QAASM,EAAcoG,EAAdpG,eAAgB6G,EAAQT,EAARS,SAAUC,EAAQV,EAARU,SAAUC,EAAqBX,EAArBW,sBAarD,OACErD,EAAAA,cAACsD,EAAAA,QAAa,KACZtD,EAAAA,cAAClE,EAAAA,QAAMyH,EAAA,GACDxH,EAAK,CACTC,QAASA,EACTE,SAAUmH,EAIV9E,IAAG,mBAAAnB,OAAqBd,GACxBA,eAAgBA,EAChBD,gBAAiBmH,EAAAA,wBACjBzM,OAAQ,CAAE0E,MAAO2H,MAEnBpD,EAAAA,cAACyD,EAAAA,QAAQ,CAACN,SAAUA,IAG1B,EAEAb,EAAeJ,UAAY,CACzBM,eAAgBL,IAAAA,OAChBM,sBAAuBN,IAAAA,OACvBlG,OAAQkG,IAAAA,KACR/F,QAAS+F,IAAAA,QACPA,IAAAA,MAAgB,CACd7I,KAAM6I,IAAAA,OACNrN,MAAOqN,IAAAA,UAGX9F,gBAAiB8F,IAAAA,OACjB7F,eAAgB6F,IAAAA,OAAiBC,WACjC7F,UAAW4F,IAAAA,OACX3F,WAAY2F,IAAAA,QAGdG,EAAeD,aAAe,CAC5BG,eAAgB,uBAChBC,sBAAuB,uBACvBxG,QAAQ,EACRG,QAAS,GACTC,gBAAiB,GACjBE,UAAW,GACXC,WAAY,0BAGd,m7CC3DA,IAAMkH,EAAsB,SAAC3H,GAAW,IAAD4H,EAAAC,EAEnBrB,EAOdxG,EAPFO,eACAL,EAMEF,EANFE,OACA2G,EAKE7G,EALF6G,YACApG,EAIET,EAJFS,WACAgG,EAGEzG,EAHFyG,eACAC,EAEE1G,EAFF0G,sBACArG,EACEL,EADFK,QAGId,EAAmBC,EAAAA,KAAaC,MAAM,CAC1CC,MAAOF,EAAAA,KAAaG,SAAS,4BAC7BmI,MAAOtI,EAAAA,KAAauI,KAAK,SAAS,SAACrI,GACjC,GAAIA,EACF,OAAOF,EAAAA,KAAaG,SAAS,2BAEjC,IACAqI,SAAUxI,EAAAA,KAAauI,KAAK,SAAS,SAACE,GACV,IAADC,EAAAC,EAAzB,GAAiB,OAAbC,QAAa,IAAbA,GAAAA,EAAeC,KACjB,OAAO7I,EAAAA,KAAaG,SAAS,sBAAD0B,OAEe,QAFf6G,EAExBI,EAAAA,mBAAmBF,EAAcG,cAAM,IAAAL,EAAAA,EAChB,QADgBC,EACvCC,EAAc7C,iBAAS,IAAA4C,OAAA,EAAvBA,EAAyBK,eAIjC,MAGuD9H,EAAA/B,GAAfgC,EAAAA,EAAAA,WAAS,GAAM,GAAlD8H,EAAa/H,EAAA,GAAEgI,EAAgBhI,EAAA,GACAI,EAAAnC,GAAVgC,EAAAA,EAAAA,YAAU,GAA/BgI,EAAM7H,EAAA,GAAE8H,EAAS9H,EAAA,GAC4B+H,EAAAlK,GAAVgC,EAAAA,EAAAA,YAAU,GAA7CyH,EAAaS,EAAA,GAAEC,EAAgBD,EAAA,GACoBE,EAAApK,GAAVgC,EAAAA,EAAAA,YAAU,GAAnDqI,EAAgBD,EAAA,GAAEE,EAAmBF,EAAA,GAC5CG,GACEC,EAAAA,EAAAA,WADMvI,EAAyBsI,EAAzBtI,0BAA2BG,EAASmI,EAATnI,UAAWC,EAAYkI,EAAZlI,aAGxCwD,GAAS4E,EAAAA,EAAAA,IAAU,CACvBtG,cAAe,CACbpD,MAAO2H,GAAY,GACnBS,MAAO,GACPE,SAAU,IAEZ5D,kBAAkB,EAClBD,gBAAgB,EAChB5E,iBAAAA,EACAY,SAAU,SAACnF,GACTuE,EACGgE,SAASvI,EAAQ,CAAEwI,YAAY,IAC/B/H,MAAK,WACJ4N,EAAgCrO,GAC5B4F,GACFI,GAAa,EAEjB,IAAE,OACK,SAACmE,GACNX,EAAO8E,UAAUnE,EACnB,GACJ,IAGFwB,GAMIC,EAAAA,EAAAA,SAAgB,CAClBH,eAAAA,EACAC,sBAAAA,EACAxG,OAAAA,EACA2G,YAAAA,EACApG,WAAAA,EACA+F,eAAAA,EACAU,SAAUC,EAAAA,cAAcoC,qBACxBzC,cAAe,iCACfC,QAASC,EAAAA,iBAAiBuC,qBAC1BC,YAA0C,QAA/B5B,EAAkB,OAAhBoB,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkBQ,mBAAW,IAAA5B,EAAAA,EAAiB,OAAbQ,QAAa,IAAbA,OAAa,EAAbA,EAAeoB,YAC7DhF,OAAAA,IAhBAvE,EAAO0G,EAAP1G,QACAM,EAAcoG,EAAdpG,eACA6G,EAAQT,EAARS,SACAC,EAAQV,EAARU,SACAgC,EAA+B1C,EAA/B0C,gCAeMpI,GAAkBwI,EAAAA,EAAAA,SAAqBvJ,EAAQK,GAA/CU,cAEFyI,EAAc,SAACC,GACnBC,aAAaD,GACbjB,GAAiB,GACjBE,EAAU,IACVpE,EAAOuB,cAAc,QAAS,yCAChC,EAoCA,OAJAnE,EAAAA,EAAAA,YAAU,WACR4C,EAAOmB,cAAc,QAAS0B,EAChC,GAAG,CAACA,IAGFpD,EAAAA,cAACsD,EAAAA,QAAa,KACZtD,EAAAA,cAAC4F,EAAAA,QAAYrC,EAAA,GACPxH,EAAK,CACTe,UAAWA,EACXH,0BAA2BA,EAC3BI,aAAcA,EACdkG,SAAUC,EAAAA,cAAcoC,qBACxBtJ,QAASA,EACTwC,WAAW,sBACXlC,eAAgBA,EAChBiE,OAAQA,IAERP,EAAAA,cAACgB,EAAAA,QAAM,CACLC,aAAcV,EAAOW,OAAOzF,MAC5B0F,GAAI0E,EAAAA,UAAUC,MACd1E,WAAYpF,GAAWgB,EACvBqE,cAAY,EACZC,UAAU,QACVhI,KAAMuM,EAAAA,UAAUC,MAChB1J,QAASA,EACTmF,YAAcvE,EAA8C,GAA9B,4BAC9BwE,SAAU,SAACnN,GACTkM,EAAOmB,cAAcmE,EAAAA,UAAUC,MAAOzR,EAAES,OACxCyL,EAAOmB,cAAcmE,EAAAA,UAAUE,WAAOC,GACtCzF,EAAOmB,cAAcmE,EAAAA,UAAUI,cAAUD,GACzCzF,EAAOuB,cAAc+D,EAAAA,UAAUE,WAAOC,GACtCzF,EAAOuB,cAAc+D,EAAAA,UAAUI,cAAUD,GA7DtB,SAACE,GAC5BvB,IACAE,EAAiB,MACjBG,EAAoB,MACpB,IAAMmB,EAAiBC,YAAW,WAChCzB,EAAU,IACVF,GAAiB,EACnB,GAAG,KAEH4B,MAAMH,EAAW,CACftO,OAAQ,QAEPJ,MAAK,SAAC8O,GACL,GAAKA,EAASC,GAGZ,OAAOD,EAASE,OAFhBf,EAAYU,EAIhB,IACC3O,MAAK,SAAC4M,GACLuB,aAAaQ,GACbxB,EAAUP,EAAKM,QACfD,GAAiB,EACnB,IAAE,OACK,SAACgC,GACNhB,EAAYU,GACZO,QAAQD,MAAM,mCAAoCA,EACpD,GACJ,CAkCUE,CAAqBtS,EAAEuS,WACzB,EACA9R,MAAOyL,EAAOxJ,OAAO0E,QAEtBiJ,IAAW1H,GACVgD,EAAAA,cAACgB,EAAAA,QAAM,CACLC,aACEuD,GAAiBjE,EAAOW,OAAO2C,MAC3B,oCACAtD,EAAOW,OAAO2C,MAEpB1C,GAAI0E,EAAAA,UAAUE,MACd3E,WAAYoD,GAAiBxI,GAAWgB,EACxCqE,cAAY,EACZwF,cAAY,EACZC,UAAWtC,EACXlD,UAAU,QACVhI,KAAMuM,EAAAA,UAAUE,MAChB3J,QAASoI,EAAgB,CAACuC,EAAAA,2BAA6BrC,EACvDnD,YAAcvE,EAAgC,GAAhB,cAC9BwE,SAAU,SAACnN,GACTkM,EAAOmB,cAAcmE,EAAAA,UAAUE,MAAO1R,EAAES,OACxCyL,EAAOmB,cAAcmE,EAAAA,UAAUI,cAAUD,GACzCzF,EAAOuB,cAAc+D,EAAAA,UAAUI,cAAUD,GAEzCnB,EAAiBH,EAAOsC,MAAK,SAACnD,GAAK,OAAKA,EAAM/O,QAAUT,EAAES,KAAK,KAC/DkQ,EAAoB,KACtB,EACAlQ,MACE0P,EACIuC,EAAAA,0BAA0BjS,MAC1ByL,EAAOxJ,OAAO8M,SAIV,OAAbM,QAAa,IAAbA,OAAa,EAAbA,EAAeC,QAASpH,GACvBgD,EAAAA,cAACgB,EAAAA,QAAM,CACLC,aAAcV,EAAOW,OAAO6C,SAC5B5C,GAAI0E,EAAAA,UAAUI,SACd7E,WAAYpF,GAAWgB,EACvBqE,cAAY,EACZwF,cAAY,EACZvF,UACyB,QADhBsC,EACPO,EAAc7C,iBAAS,IAAAsC,EAAAA,EACvBxF,IAAUmC,EAAOxJ,OAAO8M,MAAO,GAAG,GAEpCvK,KAAMuM,EAAAA,UAAUI,SAChB7J,QAAS+H,EAAcC,KACvB7C,YAAcvE,EAA+B,GAAf,aAC9BwE,SAAU,SAACnN,GACTkM,EAAOmB,cAAcmE,EAAAA,UAAUI,SAAU5R,EAAES,OAC3CkQ,EACEb,EAAcC,KAAK4C,MAAK,SAACnD,GAAK,OAAKA,EAAM/O,QAAUT,EAAES,KAAK,IAE9D,EACAA,MAAOyL,EAAOxJ,OAAOgN,YAI3B/D,EAAAA,cAACyD,EAAAA,QAAQ,CAACN,SAAUA,IAG1B,EAEAO,EAAoBxB,UAAY,CAC9BM,eAAgBL,IAAAA,OAChBM,sBAAuBN,IAAAA,OACvBlG,OAAQkG,IAAAA,KACRS,YAAaT,IAAAA,KACb/F,QAAS+F,IAAAA,QACPA,IAAAA,MAAgB,CACd7I,KAAM6I,IAAAA,OACNrN,MAAOqN,IAAAA,UAGX9F,gBAAiB8F,IAAAA,OACjB7F,eAAgB6F,IAAAA,OAAiBC,WACjC7F,UAAW4F,IAAAA,OACX3F,WAAY2F,IAAAA,QAGduB,EAAoBrB,aAAe,CACjCG,eAAgB,oCAChBC,sBAAuB,uBACvBxG,QAAQ,EACR2G,aAAa,EACbxG,QAAS,GACTC,gBAAiB,GACjBE,UAAW,GACXC,WAAY,0BAGd,+5CCtPA,IAAMyK,EAAe,SAAClL,GACpB,IACkBwG,EAOdxG,EAPFO,eACAL,EAMEF,EANFE,OACA2G,EAKE7G,EALF6G,YACApG,EAIET,EAJFS,WACAgG,EAGEzG,EAHFyG,eACAC,EAEE1G,EAFF0G,sBACArG,EACEL,EADFK,QAGId,EAAmBC,EAAAA,KAAaC,MAAM,CAC1CC,MAAOF,EAAAA,KAAaG,SAAS,4BAC7BmI,MAAOtI,EAAAA,KAAauI,KAAK,SAAS,SAACrI,GACjC,GAAIA,EACF,OAAOF,EAAAA,KAAaG,SAAS,2BAEjC,MAGuDe,EAAA/B,GAAfgC,EAAAA,EAAAA,WAAS,GAAM,GAAlD8H,EAAa/H,EAAA,GAAEgI,EAAgBhI,EAAA,GACAI,EAAAnC,GAAVgC,EAAAA,EAAAA,YAAU,GAA/BgI,EAAM7H,EAAA,GAAE8H,EAAS9H,EAAA,GAC4B+H,EAAAlK,GAAVgC,EAAAA,EAAAA,YAAU,GAA7CyH,EAAaS,EAAA,GAAEC,EAAgBD,EAAA,GACtCK,GACEC,EAAAA,EAAAA,WADMvI,EAAyBsI,EAAzBtI,0BAA2BG,EAASmI,EAATnI,UAAWC,EAAYkI,EAAZlI,aAGxCwD,GAAS4E,EAAAA,EAAAA,IAAU,CACvBtG,cAAe,CACbpD,MAAO2H,GAAY,GACnBS,MAAO,IAET1D,kBAAkB,EAClBD,gBAAgB,EAChB5E,iBAAAA,EACAY,SAAU,SAACnF,GACTuE,EACGgE,SAASvI,EAAQ,CAAEwI,YAAY,IAC/B/H,MAAK,WACJ4N,EAAgCrO,GAC5B4F,GACFI,GAAa,EAEjB,IAAE,OACK,SAACmE,GACNX,EAAO8E,UAAUnE,EACnB,GACJ,IAGFwB,GAMIC,EAAAA,EAAAA,SAAgB,CAClBH,eAAAA,EACAC,sBAAAA,EACAxG,OAAAA,EACA2G,YAAAA,EACApG,WAAAA,EACA+F,eAAAA,EACAU,SAAUC,EAAAA,cAAcgE,cACxBrE,cAAe,0BACfC,QAASC,EAAAA,iBAAiBmE,cAC1B3B,YAA0B,OAAbpB,QAAa,IAAbA,OAAa,EAAbA,EAAeoB,YAC5BhF,OAAAA,IAhBAvE,EAAO0G,EAAP1G,QACAM,EAAcoG,EAAdpG,eACA6G,EAAQT,EAARS,SACAC,EAAQV,EAARU,SACAgC,EAA+B1C,EAA/B0C,gCAeMpI,GAAkBwI,EAAAA,EAAAA,SAAqBvJ,EAAQK,GAA/CU,cAEFyI,EAAc,SAACC,GACnBC,aAAaD,GACbjB,GAAiB,GACjBE,EAAU,IACVpE,EAAOuB,cAAc,QAAS,yCAChC,EAmCA,OAJAnE,EAAAA,EAAAA,YAAU,WACR4C,EAAOmB,cAAc,QAAS0B,EAChC,GAAG,CAACA,IAGFpD,EAAAA,cAACsD,EAAAA,QAAa,KACZtD,EAAAA,cAAC4F,EAAAA,QAAYrC,EAAA,GACPxH,EAAK,CACTe,UAAWA,EACXH,0BAA2BA,EAC3BI,aAAcA,EACdkG,SAAUC,EAAAA,cAAcgE,cACxBlL,QAASA,EACTwC,WAAW,eACXlC,eAAgBA,EAChBiE,OAAQA,IAERP,EAAAA,cAACgB,EAAAA,QAAM,CACLC,aAAcV,EAAOW,OAAOzF,MAC5B0F,GAAI0E,EAAAA,UAAUC,MACd1E,WAAYpF,GAAWgB,EACvBqE,cAAY,EACZC,UAAU,QACVhI,KAAMuM,EAAAA,UAAUC,MAChB1J,QAASA,EACTmF,YAAcvE,EAA8C,GAA9B,4BAC9BwE,SAAU,SAACnN,GACTkM,EAAOmB,cAAcmE,EAAAA,UAAUC,MAAOzR,EAAES,OACxCyL,EAAOmB,cAAcmE,EAAAA,UAAUE,WAAOC,GACtCzF,EAAOuB,cAAc+D,EAAAA,UAAUE,WAAOC,GA1DnB,SAACE,GAC5BvB,IACAE,EAAiB,MACjB,IAAMsB,EAAiBC,YAAW,WAChCzB,EAAU,IACVF,GAAiB,EACnB,GAAG,KAEH4B,MAAMH,EAAW,CACftO,OAAQ,QAEPJ,MAAK,SAAC8O,GACL,GAAKA,EAASC,GAGZ,OAAOD,EAASE,OAFhBf,EAAYU,EAIhB,IACC3O,MAAK,SAAC4M,GACLuB,aAAaQ,GACbxB,EAAUP,EAAKM,QACfD,GAAiB,EACnB,IAAE,OACK,SAACgC,GACNhB,EAAYU,GACZO,QAAQD,MAAM,mCAAoCA,EACpD,GACJ,CAgCUE,CAAqBtS,EAAEuS,WACzB,EACA9R,MAAOyL,EAAOxJ,OAAO0E,QAEtBiJ,IAAW1H,GACVgD,EAAAA,cAACgB,EAAAA,QAAM,CACLC,aACEuD,GAAiBjE,EAAOW,OAAO2C,MAC3B,oCACAtD,EAAOW,OAAO2C,MAEpB1C,GAAI0E,EAAAA,UAAUE,MACd3E,WAAYoD,GAAiBxI,GAAWgB,EACxCqE,cAAY,EACZwF,cAAY,EACZC,UAAWtC,EACXlD,UAAU,QACVhI,KAAMuM,EAAAA,UAAUE,MAChB3J,QAASoI,EAAgB,CAACuC,EAAAA,2BAA6BrC,EACvDnD,YAAcvE,EAAgC,GAAhB,cAC9BwE,SAAU,SAACnN,GACTkM,EAAOmB,cAAcmE,EAAAA,UAAUE,MAAO1R,EAAES,OAExC+P,EAAiBH,EAAOsC,MAAK,SAACnD,GAAK,OAAKA,EAAM/O,QAAUT,EAAES,KAAK,IACjE,EACAA,MACE0P,EACIuC,EAAAA,0BAA0BjS,MAC1ByL,EAAOxJ,OAAO8M,SAK1B7D,EAAAA,cAACyD,EAAAA,QAAQ,CAACN,SAAUA,IAG1B,EAEA8D,EAAa/E,UAAY,CACvBM,eAAgBL,IAAAA,OAChBM,sBAAuBN,IAAAA,OACvBlG,OAAQkG,IAAAA,KACRS,YAAaT,IAAAA,KACb/F,QAAS+F,IAAAA,QACPA,IAAAA,MAAgB,CACd7I,KAAM6I,IAAAA,OACNrN,MAAOqN,IAAAA,UAGX9F,gBAAiB8F,IAAAA,OACjB7F,eAAgB6F,IAAAA,OAAiBC,WACjC7F,UAAW4F,IAAAA,OACX3F,WAAY2F,IAAAA,QAGd8E,EAAa5E,aAAe,CAC1BG,eAAgB,6BAChBC,sBAAuB,uBACvBxG,QAAQ,EACR2G,aAAa,EACbxG,QAAS,GACTC,gBAAiB,GACjBE,UAAW,GACXC,WAAY,0BAGd,uKC5NApI,EAAA,kBAAAC,CAAA,MAAAC,EAAAD,EAAA,GAAAE,EAAAC,OAAAC,UAAAC,EAAAH,EAAAI,eAAAC,EAAAJ,OAAAK,gBAAA,SAAAP,EAAAD,EAAAE,GAAAD,EAAAD,GAAAE,EAAAO,KAAA,EAAAC,EAAA,mBAAAC,OAAAA,OAAA,GAAAC,EAAAF,EAAAG,UAAA,aAAAC,EAAAJ,EAAAK,eAAA,kBAAAC,EAAAN,EAAAO,aAAA,yBAAAC,EAAAjB,EAAAD,EAAAE,GAAA,OAAAC,OAAAK,eAAAP,EAAAD,EAAA,CAAAS,MAAAP,EAAAiB,YAAA,EAAAC,cAAA,EAAAC,UAAA,IAAApB,EAAAD,EAAA,KAAAkB,EAAA,aAAAjB,GAAAiB,EAAA,SAAAjB,EAAAD,EAAAE,GAAA,OAAAD,EAAAD,GAAAE,CAAA,WAAAoB,EAAArB,EAAAD,EAAAE,EAAAG,GAAA,IAAAK,EAAAV,GAAAA,EAAAI,qBAAAmB,EAAAvB,EAAAuB,EAAAX,EAAAT,OAAAqB,OAAAd,EAAAN,WAAAU,EAAA,IAAAW,EAAApB,GAAA,WAAAE,EAAAK,EAAA,WAAAH,MAAAiB,EAAAzB,EAAAC,EAAAY,KAAAF,CAAA,UAAAe,EAAA1B,EAAAD,EAAAE,GAAA,WAAA0B,KAAA,SAAAC,IAAA5B,EAAA6B,KAAA9B,EAAAE,GAAA,OAAAD,GAAA,OAAA2B,KAAA,QAAAC,IAAA5B,EAAA,EAAAD,EAAAsB,KAAAA,EAAA,IAAAS,EAAA,iBAAAC,EAAA,iBAAAC,EAAA,YAAAC,EAAA,YAAAC,EAAA,YAAAZ,IAAA,UAAAa,IAAA,UAAAC,IAAA,KAAAC,EAAA,GAAApB,EAAAoB,EAAA1B,GAAA,8BAAA2B,EAAApC,OAAAqC,eAAAC,EAAAF,GAAAA,EAAAA,EAAAG,EAAA,MAAAD,GAAAA,IAAAvC,GAAAG,EAAAyB,KAAAW,EAAA7B,KAAA0B,EAAAG,GAAA,IAAAE,EAAAN,EAAAjC,UAAAmB,EAAAnB,UAAAD,OAAAqB,OAAAc,GAAA,SAAAM,EAAA3C,GAAA,0BAAA4C,SAAA,SAAA7C,GAAAkB,EAAAjB,EAAAD,GAAA,SAAAC,GAAA,YAAA6C,QAAA9C,EAAAC,EAAA,gBAAA8C,EAAA9C,EAAAD,GAAA,SAAAgD,EAAA9C,EAAAK,EAAAG,EAAAE,GAAA,IAAAE,EAAAa,EAAA1B,EAAAC,GAAAD,EAAAM,GAAA,aAAAO,EAAAc,KAAA,KAAAZ,EAAAF,EAAAe,IAAAE,EAAAf,EAAAP,MAAA,OAAAsB,GAAA,iBAAAA,GAAA1B,EAAAyB,KAAAC,EAAA,WAAA/B,EAAAiD,QAAAlB,EAAAmB,SAAAC,MAAA,SAAAlD,GAAA+C,EAAA,OAAA/C,EAAAS,EAAAE,EAAA,aAAAX,GAAA+C,EAAA,QAAA/C,EAAAS,EAAAE,EAAA,IAAAZ,EAAAiD,QAAAlB,GAAAoB,MAAA,SAAAlD,GAAAe,EAAAP,MAAAR,EAAAS,EAAAM,EAAA,aAAAf,GAAA,OAAA+C,EAAA,QAAA/C,EAAAS,EAAAE,EAAA,IAAAA,EAAAE,EAAAe,IAAA,KAAA3B,EAAAK,EAAA,gBAAAE,MAAA,SAAAR,EAAAI,GAAA,SAAA+C,IAAA,WAAApD,GAAA,SAAAA,EAAAE,GAAA8C,EAAA/C,EAAAI,EAAAL,EAAAE,EAAA,WAAAA,EAAAA,EAAAA,EAAAiD,KAAAC,EAAAA,GAAAA,GAAA,aAAA1B,EAAA1B,EAAAE,EAAAG,GAAA,IAAAE,EAAAwB,EAAA,gBAAArB,EAAAE,GAAA,GAAAL,IAAA0B,EAAA,MAAAoB,MAAA,mCAAA9C,IAAA2B,EAAA,cAAAxB,EAAA,MAAAE,EAAA,OAAAH,MAAAR,EAAAqD,MAAA,OAAAjD,EAAAkD,OAAA7C,EAAAL,EAAAwB,IAAAjB,IAAA,KAAAE,EAAAT,EAAAmD,SAAA,GAAA1C,EAAA,KAAAE,EAAAyC,EAAA3C,EAAAT,GAAA,GAAAW,EAAA,IAAAA,IAAAmB,EAAA,gBAAAnB,CAAA,cAAAX,EAAAkD,OAAAlD,EAAAqD,KAAArD,EAAAsD,MAAAtD,EAAAwB,SAAA,aAAAxB,EAAAkD,OAAA,IAAAhD,IAAAwB,EAAA,MAAAxB,EAAA2B,EAAA7B,EAAAwB,IAAAxB,EAAAuD,kBAAAvD,EAAAwB,IAAA,gBAAAxB,EAAAkD,QAAAlD,EAAAwD,OAAA,SAAAxD,EAAAwB,KAAAtB,EAAA0B,EAAA,IAAAK,EAAAX,EAAA3B,EAAAE,EAAAG,GAAA,cAAAiC,EAAAV,KAAA,IAAArB,EAAAF,EAAAiD,KAAApB,EAAAF,EAAAM,EAAAT,MAAAM,EAAA,gBAAA1B,MAAA6B,EAAAT,IAAAyB,KAAAjD,EAAAiD,KAAA,WAAAhB,EAAAV,OAAArB,EAAA2B,EAAA7B,EAAAkD,OAAA,QAAAlD,EAAAwB,IAAAS,EAAAT,IAAA,YAAA4B,EAAAzD,EAAAE,GAAA,IAAAG,EAAAH,EAAAqD,OAAAhD,EAAAP,EAAAa,SAAAR,GAAA,GAAAE,IAAAN,EAAA,OAAAC,EAAAsD,SAAA,eAAAnD,GAAAL,EAAAa,SAAA,SAAAX,EAAAqD,OAAA,SAAArD,EAAA2B,IAAA5B,EAAAwD,EAAAzD,EAAAE,GAAA,UAAAA,EAAAqD,SAAA,WAAAlD,IAAAH,EAAAqD,OAAA,QAAArD,EAAA2B,IAAA,IAAAiC,UAAA,oCAAAzD,EAAA,aAAA8B,EAAA,IAAAzB,EAAAiB,EAAApB,EAAAP,EAAAa,SAAAX,EAAA2B,KAAA,aAAAnB,EAAAkB,KAAA,OAAA1B,EAAAqD,OAAA,QAAArD,EAAA2B,IAAAnB,EAAAmB,IAAA3B,EAAAsD,SAAA,KAAArB,EAAA,IAAAvB,EAAAF,EAAAmB,IAAA,OAAAjB,EAAAA,EAAA0C,MAAApD,EAAAF,EAAA+D,YAAAnD,EAAAH,MAAAP,EAAA8D,KAAAhE,EAAAiE,QAAA,WAAA/D,EAAAqD,SAAArD,EAAAqD,OAAA,OAAArD,EAAA2B,IAAA5B,GAAAC,EAAAsD,SAAA,KAAArB,GAAAvB,GAAAV,EAAAqD,OAAA,QAAArD,EAAA2B,IAAA,IAAAiC,UAAA,oCAAA5D,EAAAsD,SAAA,KAAArB,EAAA,UAAA+B,EAAAjE,GAAA,IAAAD,EAAA,CAAAmE,OAAAlE,EAAA,SAAAA,IAAAD,EAAAoE,SAAAnE,EAAA,SAAAA,IAAAD,EAAAqE,WAAApE,EAAA,GAAAD,EAAAsE,SAAArE,EAAA,SAAAsE,WAAAC,KAAAxE,EAAA,UAAAyE,EAAAxE,GAAA,IAAAD,EAAAC,EAAAyE,YAAA,GAAA1E,EAAA4B,KAAA,gBAAA5B,EAAA6B,IAAA5B,EAAAyE,WAAA1E,CAAA,UAAAyB,EAAAxB,GAAA,KAAAsE,WAAA,EAAAJ,OAAA,SAAAlE,EAAA4C,QAAAqB,EAAA,WAAAS,OAAA,YAAAjC,EAAA1C,GAAA,GAAAA,GAAA,KAAAA,EAAA,KAAAE,EAAAF,EAAAY,GAAA,GAAAV,EAAA,OAAAA,EAAA4B,KAAA9B,GAAA,sBAAAA,EAAAgE,KAAA,OAAAhE,EAAA,IAAA4E,MAAA5E,EAAA6E,QAAA,KAAAtE,GAAA,EAAAG,EAAA,SAAAsD,IAAA,OAAAzD,EAAAP,EAAA6E,QAAA,GAAAxE,EAAAyB,KAAA9B,EAAAO,GAAA,OAAAyD,EAAAvD,MAAAT,EAAAO,GAAAyD,EAAAV,MAAA,EAAAU,EAAA,OAAAA,EAAAvD,MAAAR,EAAA+D,EAAAV,MAAA,EAAAU,CAAA,SAAAtD,EAAAsD,KAAAtD,CAAA,YAAAoD,iBAAA9D,EAAA,2BAAAoC,EAAAhC,UAAAiC,EAAA9B,EAAAoC,EAAA,eAAAlC,MAAA4B,EAAAjB,cAAA,IAAAb,EAAA8B,EAAA,eAAA5B,MAAA2B,EAAAhB,cAAA,IAAAgB,EAAA0C,YAAA5D,EAAAmB,EAAArB,EAAA,qBAAAhB,EAAA+E,oBAAA,SAAA9E,GAAA,IAAAD,EAAA,mBAAAC,GAAAA,EAAA+E,YAAA,QAAAhF,IAAAA,IAAAoC,GAAA,uBAAApC,EAAA8E,aAAA9E,EAAAiF,MAAA,EAAAjF,EAAAkF,KAAA,SAAAjF,GAAA,OAAAE,OAAAgF,eAAAhF,OAAAgF,eAAAlF,EAAAoC,IAAApC,EAAAmF,UAAA/C,EAAAnB,EAAAjB,EAAAe,EAAA,sBAAAf,EAAAG,UAAAD,OAAAqB,OAAAmB,GAAA1C,CAAA,EAAAD,EAAAqF,MAAA,SAAApF,GAAA,OAAAiD,QAAAjD,EAAA,EAAA2C,EAAAG,EAAA3C,WAAAc,EAAA6B,EAAA3C,UAAAU,GAAA,0BAAAd,EAAA+C,cAAAA,EAAA/C,EAAAsF,MAAA,SAAArF,EAAAC,EAAAG,EAAAE,EAAAG,QAAA,IAAAA,IAAAA,EAAA6E,SAAA,IAAA3E,EAAA,IAAAmC,EAAAzB,EAAArB,EAAAC,EAAAG,EAAAE,GAAAG,GAAA,OAAAV,EAAA+E,oBAAA7E,GAAAU,EAAAA,EAAAoD,OAAAb,MAAA,SAAAlD,GAAA,OAAAA,EAAAqD,KAAArD,EAAAQ,MAAAG,EAAAoD,MAAA,KAAApB,EAAAD,GAAAzB,EAAAyB,EAAA3B,EAAA,aAAAE,EAAAyB,EAAA/B,GAAA,0BAAAM,EAAAyB,EAAA,qDAAA3C,EAAAwF,KAAA,SAAAvF,GAAA,IAAAD,EAAAG,OAAAF,GAAAC,EAAA,WAAAG,KAAAL,EAAAE,EAAAsE,KAAAnE,GAAA,OAAAH,EAAAuF,UAAA,SAAAzB,IAAA,KAAA9D,EAAA2E,QAAA,KAAA5E,EAAAC,EAAAwF,MAAA,GAAAzF,KAAAD,EAAA,OAAAgE,EAAAvD,MAAAR,EAAA+D,EAAAV,MAAA,EAAAU,CAAA,QAAAA,EAAAV,MAAA,EAAAU,CAAA,GAAAhE,EAAA0C,OAAAA,EAAAjB,EAAArB,UAAA,CAAA4E,YAAAvD,EAAAkD,MAAA,SAAA3E,GAAA,QAAA2F,KAAA,OAAA3B,KAAA,OAAAN,KAAA,KAAAC,MAAA1D,EAAA,KAAAqD,MAAA,OAAAE,SAAA,UAAAD,OAAA,YAAA1B,IAAA5B,EAAA,KAAAsE,WAAA1B,QAAA4B,IAAAzE,EAAA,QAAAE,KAAA,WAAAA,EAAA0F,OAAA,IAAAvF,EAAAyB,KAAA,KAAA5B,KAAA0E,OAAA1E,EAAA2F,MAAA,WAAA3F,GAAAD,EAAA,EAAA6F,KAAA,gBAAAxC,MAAA,MAAArD,EAAA,KAAAsE,WAAA,GAAAG,WAAA,aAAAzE,EAAA2B,KAAA,MAAA3B,EAAA4B,IAAA,YAAAkE,IAAA,EAAAnC,kBAAA,SAAA5D,GAAA,QAAAsD,KAAA,MAAAtD,EAAA,IAAAE,EAAA,cAAA8F,EAAA3F,EAAAE,GAAA,OAAAK,EAAAgB,KAAA,QAAAhB,EAAAiB,IAAA7B,EAAAE,EAAA8D,KAAA3D,EAAAE,IAAAL,EAAAqD,OAAA,OAAArD,EAAA2B,IAAA5B,KAAAM,CAAA,SAAAA,EAAA,KAAAgE,WAAAM,OAAA,EAAAtE,GAAA,IAAAA,EAAA,KAAAG,EAAA,KAAA6D,WAAAhE,GAAAK,EAAAF,EAAAgE,WAAA,YAAAhE,EAAAyD,OAAA,OAAA6B,EAAA,UAAAtF,EAAAyD,QAAA,KAAAwB,KAAA,KAAA7E,EAAAT,EAAAyB,KAAApB,EAAA,YAAAM,EAAAX,EAAAyB,KAAApB,EAAA,iBAAAI,GAAAE,EAAA,SAAA2E,KAAAjF,EAAA0D,SAAA,OAAA4B,EAAAtF,EAAA0D,UAAA,WAAAuB,KAAAjF,EAAA2D,WAAA,OAAA2B,EAAAtF,EAAA2D,WAAA,SAAAvD,GAAA,QAAA6E,KAAAjF,EAAA0D,SAAA,OAAA4B,EAAAtF,EAAA0D,UAAA,YAAApD,EAAA,MAAAqC,MAAA,kDAAAsC,KAAAjF,EAAA2D,WAAA,OAAA2B,EAAAtF,EAAA2D,WAAA,KAAAR,OAAA,SAAA5D,EAAAD,GAAA,QAAAE,EAAA,KAAAqE,WAAAM,OAAA,EAAA3E,GAAA,IAAAA,EAAA,KAAAK,EAAA,KAAAgE,WAAArE,GAAA,GAAAK,EAAA4D,QAAA,KAAAwB,MAAAtF,EAAAyB,KAAAvB,EAAA,oBAAAoF,KAAApF,EAAA8D,WAAA,KAAA3D,EAAAH,EAAA,OAAAG,IAAA,UAAAT,GAAA,aAAAA,IAAAS,EAAAyD,QAAAnE,GAAAA,GAAAU,EAAA2D,aAAA3D,EAAA,UAAAE,EAAAF,EAAAA,EAAAgE,WAAA,UAAA9D,EAAAgB,KAAA3B,EAAAW,EAAAiB,IAAA7B,EAAAU,GAAA,KAAA6C,OAAA,YAAAS,KAAAtD,EAAA2D,WAAAlC,GAAA,KAAA8D,SAAArF,EAAA,EAAAqF,SAAA,SAAAhG,EAAAD,GAAA,aAAAC,EAAA2B,KAAA,MAAA3B,EAAA4B,IAAA,gBAAA5B,EAAA2B,MAAA,aAAA3B,EAAA2B,KAAA,KAAAoC,KAAA/D,EAAA4B,IAAA,WAAA5B,EAAA2B,MAAA,KAAAmE,KAAA,KAAAlE,IAAA5B,EAAA4B,IAAA,KAAA0B,OAAA,cAAAS,KAAA,kBAAA/D,EAAA2B,MAAA5B,IAAA,KAAAgE,KAAAhE,GAAAmC,CAAA,EAAA+D,OAAA,SAAAjG,GAAA,QAAAD,EAAA,KAAAuE,WAAAM,OAAA,EAAA7E,GAAA,IAAAA,EAAA,KAAAE,EAAA,KAAAqE,WAAAvE,GAAA,GAAAE,EAAAmE,aAAApE,EAAA,YAAAgG,SAAA/F,EAAAwE,WAAAxE,EAAAoE,UAAAG,EAAAvE,GAAAiC,CAAA,kBAAAlC,GAAA,QAAAD,EAAA,KAAAuE,WAAAM,OAAA,EAAA7E,GAAA,IAAAA,EAAA,KAAAE,EAAA,KAAAqE,WAAAvE,GAAA,GAAAE,EAAAiE,SAAAlE,EAAA,KAAAI,EAAAH,EAAAwE,WAAA,aAAArE,EAAAuB,KAAA,KAAArB,EAAAF,EAAAwB,IAAA4C,EAAAvE,EAAA,QAAAK,CAAA,QAAA8C,MAAA,0BAAA8C,cAAA,SAAAnG,EAAAE,EAAAG,GAAA,YAAAmD,SAAA,CAAA3C,SAAA6B,EAAA1C,GAAA+D,WAAA7D,EAAA+D,QAAA5D,GAAA,cAAAkD,SAAA,KAAA1B,IAAA5B,GAAAkC,CAAA,GAAAnC,CAAA,UAAAoG,EAAA/F,EAAAJ,EAAAD,EAAAE,EAAAK,EAAAK,EAAAE,GAAA,QAAAJ,EAAAL,EAAAO,GAAAE,GAAAE,EAAAN,EAAAD,KAAA,OAAAJ,GAAA,YAAAL,EAAAK,EAAA,CAAAK,EAAA4C,KAAArD,EAAAe,GAAAuE,QAAAtC,QAAAjC,GAAAmC,KAAAjD,EAAAK,EAAA,UAAA8F,EAAAnG,EAAAF,GAAA,gBAAAE,GAAA,GAAAoG,MAAAC,QAAArG,GAAA,OAAAA,CAAA,CAAAsG,CAAAtG,IAAA,SAAAA,EAAA8B,GAAA,IAAA/B,EAAA,MAAAC,EAAA,yBAAAS,QAAAT,EAAAS,OAAAE,WAAAX,EAAA,uBAAAD,EAAA,KAAAD,EAAAK,EAAAK,EAAAM,EAAAJ,EAAA,GAAAqB,GAAA,EAAA1B,GAAA,SAAAG,GAAAT,EAAAA,EAAA6B,KAAA5B,IAAA8D,KAAA,IAAAhC,EAAA,IAAA7B,OAAAF,KAAAA,EAAA,OAAAgC,GAAA,cAAAA,GAAAjC,EAAAU,EAAAoB,KAAA7B,IAAAqD,QAAA1C,EAAA4D,KAAAxE,EAAAS,OAAAG,EAAAiE,SAAA7C,GAAAC,GAAA,UAAA/B,GAAAK,GAAA,EAAAF,EAAAH,CAAA,iBAAA+B,GAAA,MAAAhC,EAAA,SAAAe,EAAAf,EAAA,SAAAE,OAAAa,KAAAA,GAAA,kBAAAT,EAAA,MAAAF,CAAA,SAAAO,CAAA,EAAA6F,CAAAvG,EAAAF,IAAA,SAAAE,EAAAU,GAAA,GAAAV,EAAA,qBAAAA,EAAA,OAAAwG,EAAAxG,EAAAU,GAAA,IAAAX,EAAA,GAAA0G,SAAA7E,KAAA5B,GAAA2F,MAAA,uBAAA5F,GAAAC,EAAA8E,cAAA/E,EAAAC,EAAA8E,YAAAC,MAAA,QAAAhF,GAAA,QAAAA,EAAAqG,MAAAM,KAAA1G,GAAA,cAAAD,GAAA,2CAAA4G,KAAA5G,GAAAyG,EAAAxG,EAAAU,QAAA,GAAAkG,CAAA5G,EAAAF,IAAA,qBAAA8D,UAAA,6IAAAiD,EAAA,UAAAL,EAAAxG,EAAAU,IAAA,MAAAA,GAAAA,EAAAV,EAAA2E,UAAAjE,EAAAV,EAAA2E,QAAA,QAAA7E,EAAA,EAAAK,EAAAiG,MAAA1F,GAAAZ,EAAAY,EAAAZ,IAAAK,EAAAL,GAAAE,EAAAF,GAAA,OAAAK,CAAA,CAOA,IAAM2G,EAAoB,0BAEpBC,EAAmBC,EAAAA,KAAaC,MAAM,CAC1CC,MAAOF,EAAAA,KAAaG,SAAS,4BAC7BC,SAAUJ,EAAAA,KACPG,SAAS,0BACTE,IAAI,GAAI,0BACRC,IAAI,IAAK,8BAGRsL,EAAkB,SAACpL,GACvB,IACEC,EAUED,EAVFC,QACAC,EASEF,EATFE,OACAmL,EAQErL,EARFqL,iBACAlL,EAOEH,EAPFG,SAAQC,EAONJ,EANFK,QAAAA,OAAO,IAAAD,EAAG,GAAEA,EACZE,EAKEN,EALFM,gBACAC,EAIEP,EAJFO,eACA6B,EAGEpC,EAHFoC,UACA3B,EAEET,EAFFS,WACAzF,EACEgF,EADFhF,OAEIsQ,GAAUC,EAAAA,EAAAA,QAAO,MAEjBC,EAA4B,WAEhC,GAAIC,KAAmBC,IAAAA,gBAAyB,CAC9C,IAAMC,EAAOL,EAAQM,QAGfC,EAAehK,SAASiK,cAAc,WAAWC,aAAe,GACtE5K,OAAO6K,SAAS,CACdC,IAAKN,EAAKO,UAAYP,EAAKQ,aAAeN,EAC1CO,SAAU,UAEd,CACF,EAEMX,EAAgB,WACpB,OAAOY,EAAE,kCAAkClP,MAC7C,EAEM8D,GAAiBf,GAA6B,IAAnBK,EAE3BgC,EAAyB,SAACC,GAC9B,IAAMC,EAAU,GAAApB,OAAM/B,EAAiB,KAAA+B,OAAImB,GACrCE,EAAcC,eAAeC,QAAQH,IAAe,GAI1D,OAFAE,eAAeE,WAAWJ,GAEnBC,CACT,EAEOI,EASLnE,GATsBgC,EAAAA,EAAAA,WAAS,WAC/B,MAAO,CACLf,SAAWqB,EAEP,GADAsB,EAAuB,aAAevH,EAAO4E,SAEjDF,MAAQuB,EAEJ,GADAsB,EAAuB,UAAYvH,EAAO0E,MAGlD,IAAE,GATkB,GAWdqD,EAAsB,SAACP,EAAKzJ,GAChC,GAAImH,IAAWe,EAAe,CAC5B,IAAMwB,EAAU,GAAApB,OAAM/B,EAAiB,KAAA+B,OAAImB,GAC3CG,eAAeK,QAAQP,EAAY1J,EACrC,CACF,EAaMkK,EAAY,eA1FpBtK,EA0FoBuK,GA1FpBvK,EA0FoBN,IAAAmF,MAAG,SAAA2F,EAAOC,GAAU,IAAAC,EAAA,OAAAhL,IAAAuB,MAAA,SAAA0J,GAAA,cAAAA,EAAArF,KAAAqF,EAAAhH,MAAA,OACb,GAAnB+G,EAAgB,CAAC,GAEjBnD,EAAO,CAADoD,EAAAhH,KAAA,eAAAgH,EAAAnH,OAAA,SACDkH,GAAa,cAAAC,EAAArF,KAAA,EAAAqF,EAAAhH,KAAA,EAIdiD,EAAiBgE,SAASH,EAAY,CAAEI,YAAY,IAAS,KAAD,EAAAF,EAAAhH,KAAA,gBAAAgH,EAAArF,KAAA,EAAAqF,EAAAG,GAAAH,EAAA,SAElED,GAAgBK,EAAAA,EAAAA,IAAeJ,EAAAG,IAAI,eAAAH,EAAAnH,OAAA,SAG9BkH,GAAa,yBAAAC,EAAAlF,OAAA,GAAA+E,EAAA,iBAvGxB,eAAA5K,EAAA,KAAAD,EAAAqL,UAAA,WAAA9F,SAAA,SAAArF,EAAAK,GAAA,IAAAK,EAAAP,EAAAiL,MAAArL,EAAAD,GAAA,SAAAuL,EAAAlL,GAAA+F,EAAAxF,EAAAV,EAAAK,EAAAgL,EAAAC,EAAA,OAAAnL,EAAA,UAAAmL,EAAAnL,GAAA+F,EAAAxF,EAAAV,EAAAK,EAAAgL,EAAAC,EAAA,QAAAnL,EAAA,CAAAkL,OAAA,QAwGG,gBAdiBE,GAAA,OAAAb,EAAAU,MAAA,KAAAD,UAAA,KAgBlB,OACEM,EAAAA,cAACC,EAAAA,GAAM,CACLpB,cAAeA,EACfqB,gBAAgB,EAChBC,kBAAkB,EAClBC,iBAAiB,EACjBd,SAAUN,EACV9C,SAlCiB,SAACiD,IAEhBlD,GAAWe,EAMfd,EAASiD,GALPjC,OAAOmD,SAASC,KAAO9D,CAM3B,IA2BK,SAAC+D,GAAM,OACNP,EAAAA,cAAA,QACEqI,IAAKhB,EACLiB,QAASf,EACTrL,SAAUqE,EAAOC,aACjBC,UAAU,iCAEVT,EAAAA,cAAA,OAAKS,UAAU,2CACbT,EAAAA,cAAA,OAAKS,UAAU,kBACXxE,GACA+D,EAAAA,cAAA,OACES,UAAU,kDACV,cAAY,kBAEXtC,GAGL6B,EAAAA,cAAA,OAAKS,UAAU,6BACbT,EAAAA,cAACgB,EAAAA,QAAM,CACLC,aAAcV,EAAOW,OAAOzF,MAC5B0F,GAAG,QACHC,WAAYpF,GAAWgB,EACvBqE,cAAY,EACZkH,cAAe,IACfC,cAAc,MACdlP,KAAK,QACL8C,QAASA,EACToF,SAAU,SAACnN,GACT,IAAMoN,EAAW,QACjB3C,EAAoB2C,EAAUpN,EAAES,OAChCyL,EAAOmB,cAAcD,EAAUpN,EAAES,OACjCsS,EAAiB/S,EAAES,MACrB,EACAA,MAAOyL,EAAOxJ,OAAO0E,QAEvBuE,EAAAA,cAAC2B,EAAAA,QAAgB,CACfC,SAAU5F,GAAWgB,EACrBf,OAAQA,EACRwM,aACExM,EACI,mCACA,sBAEN4F,YAAa7E,EACbiE,aAAcV,EAAOW,OAAOvF,SAC5B+M,eAAa,EACbxM,SAAUqE,EAAOC,aACjBlH,KAAK,WACLsC,IAAKS,EACLR,IAAK,IACL2F,SAAU,SAACnN,GACT,IAAMoN,EAAW,WACjBlB,EAAOuB,cAAcL,EAAU,MAC/B3C,EAAoB2C,EAAUpN,EAAE0N,OAAOjN,OACvCyL,EAAOmB,cAAcD,EAAUpN,EAAE0N,OAAOjN,MAC1C,EAEAyM,YAAcvE,EAA2C,GAA3B,yBAC9BlI,MAAOyL,EAAOxJ,OAAO4E,cAKxB,GAIf,EAEAwL,EAAgBjF,UAAY,CAC1BlG,QAASmG,IAAAA,KACTlG,OAAQkG,IAAAA,KACRiF,iBAAkBjF,IAAAA,KAClBjG,SAAUiG,IAAAA,KACV/F,QAAS+F,IAAAA,QACPA,IAAAA,MAAgB,CACd7I,KAAM6I,IAAAA,OACNrN,MAAOqN,IAAAA,UAGX9F,gBAAiB8F,IAAAA,OACjB7F,eAAgB6F,IAAAA,OAAiBC,WACjCjE,UAAWgE,IAAAA,OACX3F,WAAY2F,IAAAA,OACZpL,OAAQoL,IAAAA,QAGVgF,EAAgB9E,aAAe,CAC7BrG,SAAS,EACTC,QAAQ,EACRmL,iBAAkB,WAAO,EACzBlL,SAAU,WAAO,EACjBE,QAAS,GACTC,gBAAiB,GACjB8B,UAAW,GACX3B,WAAY,yBACZzF,OAAQ,CAAC,GAGX,83CCzMA,IAAM4R,EAA0B,SAAC5M,GAC/B,IACE0G,EAUE1G,EAVF0G,sBACAmG,EASE7M,EATF6M,WACAC,EAQE9M,EARF8M,SACA5M,EAOEF,EAPFE,OACS6M,EAMP/M,EANFK,QACgBmG,EAKdxG,EALFO,eACAC,EAIER,EAJFQ,UACAwM,EAGEhN,EAHFgN,SACAvM,EAEET,EAFFS,WACAgG,EACEzG,EADFyG,eAEsD/F,EAAA/B,GAA1BgC,EAAAA,EAAAA,UAASoM,GAAiB,GAAjD1M,EAAOK,EAAA,GAAEuM,EAAUvM,EAAA,GAGxBI,EAAAnC,GAFwCgC,EAAAA,EAAAA,WAAS,WAAO,IAADuM,EACvD,OAA0D,QAA1DA,EAAO7M,EAAQ4K,MAAK,SAACkC,GAAM,OAAKA,EAAOpU,QAAUiU,CAAQ,WAAC,IAAAE,OAAA,EAAnDA,EAAqDxN,KAC9D,IAAE,GAFK0N,EAAatM,EAAA,GAAEuM,EAAgBvM,EAAA,GAGtC6F,GACEC,EAAAA,EAAAA,SACE,CACEF,sBAAAA,EACAK,QAASC,EAAAA,iBAAiBC,OAC1BH,cAAe,oCACfwG,WAAW,EACXR,SAAAA,EACA5M,OAAAA,EACAsG,eAAAA,EACA4G,cAAAA,EACA3M,WAAAA,EACAgG,eAAAA,EACAS,SAAUC,EAAAA,cAAcF,OACxBJ,aAAa,GAEf,CAACuG,IAhBGnN,EAAO0G,EAAP1G,QAASM,EAAcoG,EAAdpG,eAAgB6G,EAAQT,EAARS,SAAUC,EAAQV,EAARU,SAAUC,EAAqBX,EAArBW,uBAmBrD1F,EAAAA,EAAAA,YAAU,WACR2L,IACAC,GACF,GAAG,IAEH,IAOMA,EAAkB,YACtBlD,EAAAA,EAAAA,GAAMuC,EAAY,CAAEY,MAAO,YACxBhS,MAAK,SAAC8O,GACL,GAAIA,EAASC,GAAI,OAAOD,EAASE,OACjC,GAAwB,MAApBF,EAASmD,OAAgB,OAAOnD,EAASE,OAE7C,MAAM,IAAI9O,MAAM,oCAAD0F,OAAqCkJ,EAASmD,QAC/D,IACCjS,MAAK,SAAC4M,GAML,IAAMsF,EAAatF,EAAKuF,OAClBC,EAAiBF,EAAWG,WAChC,SAACC,GAAK,OAAKA,EAAMhV,QAAUsH,EAAQ2N,GAAG,GAAGjV,KAAK,IAEhD4U,EAAWE,GAAkBxN,EAAQ2N,GAAG,GAExCf,EAAWU,EACb,IAAE,OACK,SAACjD,GACNC,QAAQD,MAAM,mCAAoCA,EACpD,GACJ,EAEM6C,EAA0B,WAE9B,IAEIU,EAFEC,EAAgB7B,EAAE,2CACLA,EAAE,2CA0BV8B,GAAG,SAvBd,SAAqBC,GACnB,GAAI/B,EAAE+B,EAAMpI,QAAQqI,GAAG,KACrB,OAAO,EAGT,IAAIC,EAAe,IACfxB,IAEFwB,EADuBjC,EAAE,0CACKhE,OAAOkG,WAIrCN,EADExC,IACOY,EAAE,kCAAkC4B,SAAShC,IAE7CiC,EAAcD,SAAShC,IAAMqC,EAGxCnN,OAAO6K,SAAS,CACdC,IAAKgC,EACL7B,SAAU,UAEd,GAGF,EAEMX,EAAgB,WACpB,OAAOY,EAAE,kCAAkClP,MAC7C,EAEMiF,EAAS,GAAAf,OAAMgB,IACnB,UACA9B,GACA,GACD,qBAAAc,OAAoBb,EAAS,KAE9B,OACEyD,EAAAA,cAAA,OAAKS,UAAU,0CACbT,EAAAA,cAAA,OAAKS,UAAU,0BAAyB,oBACxCT,EAAAA,cAACyD,EAAAA,QAAQ,CAACN,SAAUA,IACnB5G,GAAgC,IAAnBD,EACZ0D,EAAAA,cAAA,OAAKS,UAAU,gDACbT,EAAAA,cAAA,YAAO7B,IAGT6B,EAAAA,cAACmH,EAAAA,QAAe5D,EAAA,GACVxH,EAAK,CACTC,QAASA,EACToL,iBAxFqB,SAACmD,GAC5B,IAAMC,EAAmBpO,EAAQ4K,MAC/B,SAACkC,GAAM,OAAKA,EAAOpU,QAAUyV,CAAI,IACjC9O,MACF2N,EAAiBoB,EACnB,EAoFQtO,SAAUmH,EACVjH,QAASA,EAGTmC,IAAG,mBAAAnB,OAAqBd,GACxB6B,UAAWA,EACX7B,eAAgBA,EAChBD,gBAAiBmH,EAAAA,wBACjBzM,OAAQ,CAAE0E,MAAO2H,GAAY2F,MAKvC,EAEAJ,EAAwBzG,UAAY,CAClCO,sBAAuBN,IAAAA,OACvByG,WAAYzG,IAAAA,OACZ0G,SAAU1G,IAAAA,KACVlG,OAAQkG,IAAAA,KACR/F,QAAS+F,IAAAA,QACPA,IAAAA,MAAgB,CACd7I,KAAM6I,IAAAA,OACNrN,MAAOqN,IAAAA,OACPmC,MAAOnC,IAAAA,OACP1G,MAAO0G,IAAAA,UAGX9F,gBAAiB8F,IAAAA,OACjB7F,eAAgB6F,IAAAA,OAAiBC,WACjC7F,UAAW4F,IAAAA,OACX4G,SAAU5G,IAAAA,OACV3F,WAAY2F,IAAAA,OACZK,eAAgBL,IAAAA,QAGlBwG,EAAwBtG,aAAe,CACrCI,sBAAuB,uBACvBmG,WAAY,aACZC,UAAU,EACV5M,QAAQ,EACRG,QAAS,GACTC,gBAAiB,GACjBE,UAAW,GACXwM,SAAU,KACVvM,WAAY,yBACZgG,eAAgB,wBAGlB,m7CC7KA,IAAMiI,EAAgB,SAAC1O,GAAW,IAAD4H,EAAAC,EAEbrB,EAOdxG,EAPFO,eACAL,EAMEF,EANFE,OACA2G,EAKE7G,EALF6G,YACApG,EAIET,EAJFS,WACAgG,EAGEzG,EAHFyG,eACAC,EAEE1G,EAFF0G,sBACArG,EACEL,EADFK,QAGId,EAAmBC,EAAAA,KAAaC,MAAM,CAC1CC,MAAOF,EAAAA,KAAaG,SAAS,4BAC7BmI,MAAOtI,EAAAA,KAAauI,KAAK,SAAS,SAACrI,GACjC,GAAIA,EACF,OAAOF,EAAAA,KAAaG,SAAS,2BAEjC,IACAqI,SAAUxI,EAAAA,KAAauI,KAAK,SAAS,SAACE,GACV,IAADC,EAAAC,EAAzB,GAAiB,OAAbC,QAAa,IAAbA,GAAAA,EAAeC,KACjB,OAAO7I,EAAAA,KAAaG,SAAS,sBAAD0B,OAEe,QAFf6G,EAExBI,EAAAA,mBAAmBF,EAAcG,cAAM,IAAAL,EAAAA,EAChB,QADgBC,EACvCC,EAAc7C,iBAAS,IAAA4C,OAAA,EAAvBA,EAAyBK,eAIjC,MAGuD9H,EAAA/B,GAAfgC,EAAAA,EAAAA,WAAS,GAAM,GAAlD8H,EAAa/H,EAAA,GAAEgI,EAAgBhI,EAAA,GACAI,EAAAnC,GAAVgC,EAAAA,EAAAA,YAAU,GAA/BgI,EAAM7H,EAAA,GAAE8H,EAAS9H,EAAA,GAC4B+H,EAAAlK,GAAVgC,EAAAA,EAAAA,YAAU,GAA7CyH,EAAaS,EAAA,GAAEC,EAAgBD,EAAA,GACoBE,EAAApK,GAAVgC,EAAAA,EAAAA,YAAU,GAAnDqI,EAAgBD,EAAA,GAAEE,EAAmBF,EAAA,GAC5CG,GACEC,EAAAA,EAAAA,WADMvI,EAAyBsI,EAAzBtI,0BAA2BG,EAASmI,EAATnI,UAAWC,EAAYkI,EAAZlI,aAGxCwD,GAAS4E,EAAAA,EAAAA,IAAU,CACvBtG,cAAe,CACbpD,MAAO2H,GAAY,GACnBS,MAAO,GACPE,SAAU,IAEZ5D,kBAAkB,EAClBD,gBAAgB,EAChB5E,iBAAAA,EACAY,SAAU,SAACnF,GACTuE,EACGgE,SAASvI,EAAQ,CAAEwI,YAAY,IAC/B/H,MAAK,WACJ4N,EAAgCrO,GAC5B4F,GACFI,GAAa,EAEjB,IAAE,OACK,SAACmE,GACNX,EAAO8E,UAAUnE,EACnB,GACJ,IAGFwB,GAMIC,EAAAA,EAAAA,SAAgB,CAClBH,eAAAA,EACAC,sBAAAA,EACAxG,OAAAA,EACA2G,YAAAA,EACApG,WAAAA,EACA+F,eAAAA,EACAU,SAAUC,EAAAA,cAAcwH,eACxB7H,cAAe,2BACfC,QAASC,EAAAA,iBAAiB2H,eAC1BnF,YAA0C,QAA/B5B,EAAkB,OAAhBoB,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkBQ,mBAAW,IAAA5B,EAAAA,EAAiB,OAAbQ,QAAa,IAAbA,OAAa,EAAbA,EAAeoB,YAC7DhF,OAAAA,IAhBAvE,EAAO0G,EAAP1G,QACAM,EAAcoG,EAAdpG,eACA6G,EAAQT,EAARS,SACAC,EAAQV,EAARU,SACAgC,EAA+B1C,EAA/B0C,gCAeMpI,GAAkBwI,EAAAA,EAAAA,SAAqBvJ,EAAQK,GAA/CU,cAEFyI,EAAc,SAACC,GACnBC,aAAaD,GACbjB,GAAiB,GACjBE,EAAU,IACVpE,EAAOuB,cAAc,QAAS,yCAChC,EAoCA,OAJAnE,EAAAA,EAAAA,YAAU,WACR4C,EAAOmB,cAAc,QAAS0B,EAChC,GAAG,CAACA,IAGFpD,EAAAA,cAACsD,EAAAA,QAAa,KACZtD,EAAAA,cAAC4F,EAAAA,QAAYrC,EAAA,GACPxH,EAAK,CACTe,UAAWA,EACXH,0BAA2BA,EAC3BI,aAAcA,EACdkG,SAAUC,EAAAA,cAAcwH,eACxB1O,QAASA,EACTwC,WAAW,gBACXlC,eAAgBA,EAChBiE,OAAQA,IAERP,EAAAA,cAACgB,EAAAA,QAAM,CACLC,aAAcV,EAAOW,OAAOzF,MAC5B0F,GAAI0E,EAAAA,UAAUC,MACd1E,WAAYpF,GAAWgB,EACvBqE,cAAY,EACZC,UAAU,QACVhI,KAAMuM,EAAAA,UAAUC,MAChB1J,QAASA,EACTmF,YAAcvE,EAA8C,GAA9B,4BAC9BwE,SAAU,SAACnN,GACTkM,EAAOmB,cAAcmE,EAAAA,UAAUC,MAAOzR,EAAES,OACxCyL,EAAOmB,cAAcmE,EAAAA,UAAUE,WAAOC,GACtCzF,EAAOmB,cAAcmE,EAAAA,UAAUI,cAAUD,GACzCzF,EAAOuB,cAAc+D,EAAAA,UAAUE,WAAOC,GACtCzF,EAAOuB,cAAc+D,EAAAA,UAAUI,cAAUD,GA7DtB,SAACE,GAC5BvB,IACAE,EAAiB,MACjBG,EAAoB,MACpB,IAAMmB,EAAiBC,YAAW,WAChCzB,EAAU,IACVF,GAAiB,EACnB,GAAG,KAEH4B,MAAMH,EAAW,CACftO,OAAQ,QAEPJ,MAAK,SAAC8O,GACL,GAAKA,EAASC,GAGZ,OAAOD,EAASE,OAFhBf,EAAYU,EAIhB,IACC3O,MAAK,SAAC4M,GACLuB,aAAaQ,GACbxB,EAAUP,EAAKM,QACfD,GAAiB,EACnB,IAAE,OACK,SAACgC,GACNhB,EAAYU,GACZO,QAAQD,MAAM,mCAAoCA,EACpD,GACJ,CAkCUE,CAAqBtS,EAAEuS,WACzB,EACA9R,MAAOyL,EAAOxJ,OAAO0E,QAEtBiJ,IAAW1H,GACVgD,EAAAA,cAACgB,EAAAA,QAAM,CACLC,aACEuD,GAAiBjE,EAAOW,OAAO2C,MAC3B,oCACAtD,EAAOW,OAAO2C,MAEpB1C,GAAI0E,EAAAA,UAAUE,MACd3E,WAAYoD,GAAiBxI,GAAWgB,EACxCqE,cAAY,EACZwF,cAAY,EACZC,UAAWtC,EACXlD,UAAU,QACVhI,KAAMuM,EAAAA,UAAUE,MAChB3J,QAASoI,EAAgB,CAACuC,EAAAA,2BAA6BrC,EACvDnD,YAAcvE,EAAgC,GAAhB,cAC9BwE,SAAU,SAACnN,GACTkM,EAAOmB,cAAcmE,EAAAA,UAAUE,MAAO1R,EAAES,OACxCyL,EAAOmB,cAAcmE,EAAAA,UAAUI,cAAUD,GACzCzF,EAAOuB,cAAc+D,EAAAA,UAAUI,cAAUD,GAEzCnB,EAAiBH,EAAOsC,MAAK,SAACnD,GAAK,OAAKA,EAAM/O,QAAUT,EAAES,KAAK,KAC/DkQ,EAAoB,KACtB,EACAlQ,MACE0P,EACIuC,EAAAA,0BAA0BjS,MAC1ByL,EAAOxJ,OAAO8M,SAIV,OAAbM,QAAa,IAAbA,OAAa,EAAbA,EAAeC,QAASpH,GACvBgD,EAAAA,cAACgB,EAAAA,QAAM,CACLC,aAAcV,EAAOW,OAAO6C,SAC5B5C,GAAI0E,EAAAA,UAAUI,SACd7E,WAAYpF,GAAWgB,EACvBqE,cAAY,EACZwF,cAAY,EACZvF,UACyB,QADhBsC,EACPO,EAAc7C,iBAAS,IAAAsC,EAAAA,EACvBxF,IAAUmC,EAAOxJ,OAAO8M,MAAO,GAAG,GAEpCvK,KAAMuM,EAAAA,UAAUI,SAChB7J,QAAS+H,EAAcC,KACvB7C,YAAcvE,EAA+B,GAAf,aAC9BwE,SAAU,SAACnN,GACTkM,EAAOmB,cAAcmE,EAAAA,UAAUI,SAAU5R,EAAES,OAC3CkQ,EACEb,EAAcC,KAAK4C,MAAK,SAACnD,GAAK,OAAKA,EAAM/O,QAAUT,EAAES,KAAK,IAE9D,EACAA,MAAOyL,EAAOxJ,OAAOgN,YAI3B/D,EAAAA,cAACyD,EAAAA,QAAQ,CAACN,SAAUA,IAG1B,EAEAsH,EAAcvI,UAAY,CACxBM,eAAgBL,IAAAA,OAChBM,sBAAuBN,IAAAA,OACvBlG,OAAQkG,IAAAA,KACRS,YAAaT,IAAAA,KACb/F,QAAS+F,IAAAA,QACPA,IAAAA,MAAgB,CACd7I,KAAM6I,IAAAA,OACNrN,MAAOqN,IAAAA,UAGX9F,gBAAiB8F,IAAAA,OACjB7F,eAAgB6F,IAAAA,OAAiBC,WACjC7F,UAAW4F,IAAAA,OACX3F,WAAY2F,IAAAA,QAGdsI,EAAcpI,aAAe,CAC3BG,eAAgB,8BAChBC,sBAAuB,uBACvBxG,QAAQ,EACR2G,aAAa,EACbxG,QAAS,GACTC,gBAAiB,GACjBE,UAAW,GACXC,WAAY,0BAGd,igCCxQO,IAAMuE,EAAmB,IACnByC,EAA0B,GAC1BmH,EAA0B,CACrCzD,cACE,oFACFwD,eACE,oFACFpF,qBACE,oFACFtC,OACE,8GAGSD,EAAmB,CAC9BmE,cAAe,sBACf5B,qBAAsB,6BACtBoF,eAAgB,uBAChB1H,OAAQ,gBAGGE,EAAgB,CAC3BgE,cAAe,gBACf5B,qBAAsB,uBACtBoF,eAAgB,iBAChB1H,OAAQ,UAGG6C,EAAY,CACvBC,MAAO,QACPC,MAAO,QACPE,SAAU,YAGC5B,EAAqB,CAChCuG,WAAY,YACZC,QAAS,SACTC,OAAQ,QACR,wBAAyB,QACzB,iBAAkB,iBAGPC,EAAgCC,EAAAA,EAAAA,EAAAA,EAAA,GAC1C9H,EAAcoC,qBAAuB,qCACrCpC,EAAcwH,eAAiB,+BAC/BxH,EAAcgE,cAAgB,8BAC9BhE,EAAcF,OAAS,kBAGbiI,EAAyCD,EAAAA,EAAAA,EAAAA,EAAA,GACnD9H,EAAcoC,qBAAuB,gCACrCpC,EAAcwH,eAAiB,0BAC/BxH,EAAcgE,cAAgB,yBAC9BhE,EAAcF,OAAS,wBAGbkI,EAAyCF,EAAAA,EAAAA,EAAAA,EAAA,GACnD9H,EAAcoC,qBAAuB,gCACrCpC,EAAcwH,eAAiB,0BAC/BxH,EAAcgE,cAAgB,yBAC9BhE,EAAcF,OAAS,wBAGbmI,EAAmDH,EAAAA,EAAAA,EAAAA,EAAA,GAC7D9H,EAAcoC,qBAAuB,yCACrCpC,EAAcwH,eAAiB,mCAC/BxH,EAAcgE,cAAgB,kCAC9BhE,EAAcF,OAAS,iCAGboI,EAAsCJ,EAAAA,EAAAA,EAAAA,EAAA,GAChD9H,EAAcoC,qBAAuB,qCACrCpC,EAAcwH,eAAiB,+BAC/BxH,EAAcgE,cAAgB,8BAC9BhE,EAAcF,OAAS,qBAGbqI,EAAsCL,EAAAA,EAAAA,EAAAA,EAAA,GAChD9H,EAAcoC,qBAAuB,qCACrCpC,EAAcwH,eAAiB,+BAC/BxH,EAAcgE,cAAgB,8BAC9BhE,EAAcF,OAAS,qBAGbsI,EAAgDN,EAAAA,EAAAA,EAAAA,EAAA,GAC1D9H,EAAcoC,qBACb,8CACDpC,EAAcwH,eAAiB,wCAC/BxH,EAAcgE,cAAgB,uCAC9BhE,EAAcF,OAAS,8BAGb+D,EAA4B,CAAEzC,MAAO,aAAcxP,MAAO,+gFCiNvE,QA3RwB,SAACiH,GAA8B,IAAvBwP,EAAY7L,UAAAxG,OAAA,QAAA8M,IAAAtG,UAAA,GAAAA,UAAA,GAAG,GAE3C+C,EAYE1G,EAZF0G,sBACAK,EAWE/G,EAXF+G,QACAD,EAUE9G,EAVF8G,cACAwG,EASEtN,EATFsN,UACApN,EAQEF,EARFE,OACAsJ,EAOExJ,EAPFwJ,YACAhD,EAMExG,EANFwG,eACA4G,EAKEpN,EALFoN,cACA3M,EAIET,EAJFS,WACAgG,EAGEzG,EAHFyG,eACAS,EAEElH,EAFFkH,SACAL,EACE7G,EADF6G,YAG2CnG,EAAA/B,GAAfgC,EAAAA,EAAAA,WAAS,GAAM,GAAtCV,EAAOS,EAAA,GAAE+O,EAAU/O,EAAA,GAC0CI,EAAAnC,GAAxBgC,EAAAA,EAAAA,UAAS6F,GAAe,GAA7DjG,EAAcO,EAAA,GAAE4O,EAAiB5O,EAAA,GACI+H,EAAAlK,GAAZgC,EAAAA,EAAAA,UAAS,IAAG,GAArCyG,EAAQyB,EAAA,GAAE8G,EAAW9G,EAAA,GACcE,EAAApK,GAAVgC,EAAAA,EAAAA,YAAU,GAAnC0G,EAAQ0B,EAAA,GAAE6G,EAAW7G,EAAA,GACtB8G,GAAoBtE,EAAAA,EAAAA,QAAO,IAE3B7B,EAAc,WAClBiG,GAAY,SAACG,GACX,IAAMC,EAASC,EAAOF,GAEhBG,EAAcC,EAAAA,EAAA,GADIH,EAAU/R,OAEd,IAClBmS,SAAUvB,EAAAA,wBAAwB1H,GAClCkJ,YAAaC,EAAAA,gBAGf,MAAM,GAANhP,OAAA2O,EAAWD,GAAS,CAAEE,GACxB,IACAR,GAAW,EACb,EAEMa,EAAiB,SAAC7F,GACd,OAAJA,QAAI,IAAJA,GAAAA,EAAM8F,aACRpP,OAAOmD,SAASkM,QAAQ/F,EAAK8F,YAEjC,EA2FME,EAA0B,SAACpI,GAC3BA,EAAKjK,MACPqR,GAAW,GACXE,GAAY,SAACG,GACX,IAAMC,EAASC,EAAOF,GAChBY,GAAuB5C,EAAAA,EAAAA,WAAUiC,EAAW,CAChDY,WAAYtI,EAAKuI,eAmBnB,OAZ8B,IAA1BF,IACFX,EAAUW,GAAsBP,UAAWU,EAAAA,EAAAA,IAAgBxI,EAAKvG,MAChEiO,EAAUW,GAAsBN,YAAcC,EAAAA,cAC9CR,EAAkBjE,QAAQ9O,MAAK,WAC7B,IAAMgU,GAAkBC,EAAAA,EAAAA,oBAAmB,CACzCZ,SAAUlM,EAAAA,cAAC+M,EAAAA,QAAmB,QAGhCrB,GAAY,SAACsB,GAAQ,SAAA5P,OAAA2O,EAASiB,GAAQ,CAAEH,GAAkB,GAC5D,KAGKf,CACT,IACAL,GAAkB,SAACzR,GAAI,OAAKA,EAAO,CAAC,IAEhCoK,EAAKuI,eACPtG,EAAAA,EAAAA,GAAM5D,EAAuB,CAC3B7K,OAAQ,OACRiG,KAAMoP,KAAKC,UAAU,CACnBP,aAAcvI,EAAKuI,iBAGpBnV,MAAK,SAAC8O,GACAA,EAASC,IACZd,GAEJ,IAAE,MACK0H,IAEXC,EAAAA,EAAAA,IAAW,wBAAyBvK,IAC3BuB,EAAKqC,MACdhB,IAEAiG,GAAY,SAACG,GACX,IAAMC,EAASC,EAAOF,GAElBY,GAAuB5C,EAAAA,EAAAA,WAAUiC,EAAW,CAC9CY,WAAYtI,EAAKuI,gBAGW,IAA1BF,IACFA,EAAuBX,EAAU5S,OAAS,GAG5C,IAAMmU,EAAkBvB,EAAUW,GAGlC,IAC4B,IAA1BA,GACAY,EAAgBlB,cAAgBC,EAAAA,cAEhC,OAAOP,EAGLwB,EAAgBlB,cAAgBmB,EAAAA,gBAClCF,EAAAA,EAAAA,IAAW,sBAAuBvK,GAGpC,IAAMmJ,EAAcC,EAAAA,EAAA,GACfoB,GAAe,IAClBlB,YAAaoB,EAAAA,gBACbb,WAAYtI,EAAKuI,aACjBT,UAAUU,EAAAA,EAAAA,IAAgBxI,EAAKvG,MAC/B2P,SAAS,IAKX,OAFA1B,EAAU2B,OAAOhB,EAAsB,EAAGT,GAEnCF,CACT,GAEJ,GAEAnO,EAAAA,EAAAA,YAAU,WACR,KAAIwF,EAASjK,OAAS,GAAtB,CAEA,IAAMwU,GAAiBZ,EAAAA,EAAAA,oBAAmB,CACxCZ,SACElM,EAAAA,cAAC2N,EAAAA,QAAc,CACb1K,SAAUA,EACVhH,OAAQA,EACRoN,UAAWA,EACXF,cAAeA,EACfvG,YAAaA,EACbtG,eAAgBA,EAChBE,WAAYA,IAGhBgR,SAAS,IAGX9B,EAAY,CAACgC,GAjBkB,CAkBjC,GAAGnC,IAEH5N,EAAAA,EAAAA,YAAU,WACR,IAAI1B,EAaJ,OAXA2R,EAAAA,EAASC,cAAchY,OACrB,CACEiN,QAAAA,GAEF,CACEgL,UAAW,WAAF,OAAQpH,QAAQqH,IAAI,YAAY,EACzCC,aAAc,WAAF,OAAQtH,QAAQqH,IAAI,eAAe,EAC/CE,SAAUzB,IAIP,WACLoB,EAAAA,EAASM,YACX,CACF,GAAG,KAEHvQ,EAAAA,EAAAA,YAAU,WACRiO,EAAkBjE,QAAQzQ,SAAQ,SAACiX,GACjC/H,WAAW+H,EAAU,IACvB,IACAvC,EAAkBjE,QAAU,EAC9B,GAAG,CAACxE,IAEJ,IAAMgK,EAAmB,WAIvB1H,GACF,EAEA,MAAO,CACLzJ,QAAAA,EACAM,eAAAA,EACA6G,SAAAA,EACAC,SAAAA,EACAC,sBA3O4B,SAAHpE,GAAmC,IAA7BtD,EAAQsD,EAARtD,SAAiB4O,EAAItL,EAAXxD,MACzC+P,GAAW,GACXI,EAAkBjE,QAAQ9O,MAAK,WAC7B6S,GAAY,SAACG,GACX,IAAMuC,GAAmBtB,EAAAA,EAAAA,oBAAmB,CAC1CX,YAAamB,EAAAA,gBAGf,MAAM,GAANlQ,OAAA2O,EAAWF,GAAY,CAAEuC,GAC3B,GACF,IAEAxC,EAAkBjE,QAAQ9O,MAAK,YAC7BwN,EAAAA,EAAAA,GAAM7D,EAAgB,CACpB5K,OAAQ,OACRiG,KAAMoP,KAAKC,UAAU,CACnBnE,SAAUwB,EACV5O,SAAAA,MAGDnE,MAAK,SAAC8O,GACL,GAAKA,EAASC,GAGZ,OAAOD,EAASE,OAFhBf,GAIJ,IACCjO,KAAK6U,GAAe,MACdc,EACX,IAEAxB,EAAYpB,GACZmB,GAAY,SAACG,GACX,IAAMwC,GAAiBC,EAAAA,EAAAA,kBAAiB,CAAEpC,SAAUvQ,IACpD,MAAM,GAANyB,OAAA2O,EAAWF,GAAY,CAAEwC,GAC3B,GACF,EAwMEjJ,gCAtMsC,SAAHmJ,GAI9B,IAHL1K,EAAK0K,EAAL1K,MACAE,EAAQwK,EAARxK,SACOwG,EAAIgE,EAAX9S,MAEA+P,GAAW,GACXI,EAAkBjE,QAAQ9O,MAAK,WAC7B6S,GAAY,SAACG,GACX,IAAMuC,GAAmBtB,EAAAA,EAAAA,oBAAmB,CAC1CX,YAAamB,EAAAA,gBAGf,MAAM,GAANlQ,OAAA2O,EAAWF,GAAY,CAAEuC,GAC3B,GACF,IAEAxC,EAAkBjE,QAAQ9O,MAAK,YAC7BwN,EAAAA,EAAAA,GAAM7D,EAAgB,CACpB5K,OAAQ,OACRiG,KAAMoP,KAAKC,UAAU,CACnBnE,SAAUwB,EACV1G,MAAAA,EACAE,SAAAA,MAGDvM,MAAK,SAAC8O,GAEL,GAAwB,MAApBA,EAASmD,OAKb,OAAKnD,EAASC,GAGLD,EAASE,YAFhBf,IALAvI,OAAOmD,SAASC,KAAO9D,CAS3B,IACChF,KAAK6U,GAAe,MACdc,EACX,IAEAxB,EAAYpB,GACZmB,GAAY,SAACG,GACX,IAAMwC,GAAiBC,EAAAA,EAAAA,kBAAiB,CACtCpC,UAAUU,EAAAA,EAAAA,IAAgBrH,KAE5B,MAAM,GAANnI,OAAA2O,EAAWF,GAAY,CAAEwC,GAC3B,GACF,EAuJF,iDCrSA,QAL6B,SAACpS,EAAQK,GAEpC,MAAO,CAAEU,eADcf,GAA6B,IAAnBK,EAEnC,+lCC8FA,QA7FoB,SAClB2G,EACAhH,EACAK,EACAQ,EACAH,EACAJ,GAEA,IAAgDE,EAAA/B,GAAZgC,EAAAA,EAAAA,UAAS,IAAG,GAAzCwB,EAAUzB,EAAA,GAAE+R,EAAa/R,EAAA,GACcI,EAAAnC,GAAZgC,EAAAA,EAAAA,UAAS,IAAG,GAAvCyB,EAAStB,EAAA,GAAE4R,EAAY5R,EAAA,GACsC+H,EAAAlK,GAAZgC,EAAAA,EAAAA,UAAS,IAAG,GAA7DgS,EAAoB9J,EAAA,GAAE+J,EAAuB/J,EAAA,GAEhD5G,EAAsB,GACtBC,EAAY,GA6EhB,OA3EAN,EAAAA,EAAAA,YAAU,WACR,OAAQsF,GACN,KAAKC,EAAAA,cAAcwH,eACnB,KAAKxH,EAAAA,cAAcoC,qBACjBtH,GACG/B,GAAUK,EAAiB,EAAC,KAAAc,OACpBgB,IAAU,MAAO9B,GAAgB,GAAK,UAC3C,GACN2B,EAAY,qBACR3B,EAAiB,IAAMQ,GAAaH,IACtCsB,EAAY,UAEdwQ,EAAa,GAADrR,OACPgB,IACD,MACA9B,GACA,GACD,kCAAAc,OAAiCb,EAAS,MAE7CoS,EAAwB,iBAExB,MACF,KAAKzL,EAAAA,cAAcgE,cACjBlJ,GACG/B,GAAUK,EAAiB,EAAC,KAAAc,OACpBgB,IAAU,MAAO9B,GAAgB,GAAK,UAC3C,GACN2B,EAAY,mBACR3B,EAAiB,IAAMQ,GAAaH,IACtCsB,EAAY,UAEdwQ,EAAa,GAADrR,OACPgB,IACD,MACA9B,GACA,GACD,kCAAAc,OAAiCb,EAAS,MAE7CoS,EAAwB,iBAExB,MACF,KAAKzL,EAAAA,cAAcF,OACjBhF,GACG/B,GAAUK,EAAiB,EAAC,KAAAc,OAAQd,EAAc,UAAW,GAChE2B,EAAY,mBACR3B,EAAiB,IAAMQ,GAAaH,EACtCsB,EAAY,SACH3B,EAAiB,GAAKA,EAAiB,KAChD2B,EAAY,oBAEdwQ,EAAa,GAADrR,OACPgB,IACD,SACA9B,GACA,GACD,qBAAAc,OAAoBb,EAAS,MAEhCoS,EAAwB,gBACxB,MACF,QAGE,OAFAH,EAAc,SACdC,EAAa,IAIjBD,EAAcvQ,EAAYD,EAC5B,GAAG,CACDiF,EACAhH,EACAK,EACAQ,EACAH,EACAJ,IAGK,CAAEmS,qBAAAA,EAAsBxQ,WAAAA,EAAYC,UAAAA,EAC7C,gDC7EA,QAlB0B,SAAC9C,EAAmBY,EAAQe,GAepD,MAAO,CAdwB,SAACuB,GAC9B,IAAMC,EAAU,GAAApB,OAAM/B,EAAiB,KAAA+B,OAAImB,GACrCE,EAAcC,eAAeC,QAAQH,IAAe,GAE1D,OADAE,eAAeE,WAAWJ,GACnBC,CACT,EAE4B,SAACF,EAAKzJ,GAChC,GAAImH,IAAWe,EAAe,CAC5B,IAAMwB,EAAU,GAAApB,OAAM/B,EAAiB,KAAA+B,OAAImB,GAC3CG,eAAeK,QAAQP,EAAY1J,EACrC,CACF,EAGF,0kCCyBA,QAtCuC,WACrC,IACgB2H,EAAA/B,GAAdgC,EAAAA,EAAAA,WAAS,GAAK,GADTC,EAAyBF,EAAA,GAAEG,EAA4BH,EAAA,GAEdI,EAAAnC,GAAdgC,EAAAA,EAAAA,WAAS,GAAK,GAAzCI,EAASD,EAAA,GAAEE,EAAYF,EAAA,GAExBI,EAAgB,WAChBC,OAAOC,WAAW,eAADC,OAAgBC,EAAAA,GAAY,QAAOC,QACtDV,GAA6B,GACpBM,OAAOC,WAAW,eAADC,OAAgBG,EAAAA,GAAY,QAAOD,SAC7DV,GAA6B,EAEjC,EAwBA,OAtBAe,EAAAA,EAAAA,YAAU,WAGR,OAFAV,IACAC,OAAOO,iBAAiB,SAAUR,GAC3B,WACLC,OAAOQ,oBAAoB,SAAUT,EACvC,CACF,GAAG,KAEHU,EAAAA,EAAAA,YAAU,WAINC,SAASC,KAAKC,MAAMC,UADjBjB,GAAaH,EACe,SAEA,MAEnC,GAAG,CAACG,EAAWH,KAEfa,EAAAA,EAAAA,kBAAgB,WACdT,EAAaJ,EACf,GAAG,CAACA,IAEG,CAAEA,0BAAAA,EAA2BI,aAAAA,EAAcD,UAAAA,EACpD,gECGA,QAnCsB,SAACf,GACrB,IAAM6S,GAAYtH,EAAAA,EAAAA,UACZrK,EAAgB,WACpB,IAAM4R,EAAejR,SAASiK,cAAc,qBACtCiH,EAAclR,SAASiK,cAAc,uBACrCkH,EAAcnR,SAASiK,cAAc,+BACrCmH,EAASpR,SAASiK,cAAc,WAChCoH,GAAiC,OAAZJ,QAAY,IAAZA,OAAY,EAAZA,EAAc3G,eAAgB,EACnDgH,GAA+B,OAAXJ,QAAW,IAAXA,OAAW,EAAXA,EAAa5G,eAAgB,EACjDiH,GAA+B,OAAXJ,QAAW,IAAXA,OAAW,EAAXA,EAAa7G,eAAgB,EAGjD8B,EAFegF,EAAO9G,aAGX+G,EAAqBC,EAAoBC,EAE1DP,EAAUjH,QAAQ7J,MAAMsR,OAAM,kBAAAhS,OAAqB4M,EAAM,MAC3D,EASA,OARAxM,EAAAA,EAAAA,kBAAgB,WAId,OAHAP,IAEAC,OAAOO,iBAAiB,SAAUR,GAC3B,WACLC,OAAOQ,oBAAoB,SAAUT,EACvC,CACF,GAAG,IAED+C,EAAAA,cAAA,OAAKS,UAAU,mBAAmB4H,IAAKuG,GACrC5O,EAAAA,cAAA,OAAKS,UAAU,+BACbT,EAAAA,cAAA,OAAKS,UAAU,0BAA0B1E,EAAMmQ,SAAS,IACxDlM,EAAAA,cAAA,OAAKS,UAAU,+BAA+B1E,EAAMmQ,SAAS,KAIrE,+LCrBMtG,EAAe,SAAC7J,GACpB,IACEC,EAWED,EAXFC,QACAC,EAUEF,EAVFE,OACAK,EASEP,EATFO,eACAC,EAQER,EARFQ,UACAC,EAOET,EAPFS,WACAyG,EAMElH,EANFkH,SACA1C,EAKExE,EALFwE,OACA5D,EAIEZ,EAJFY,0BACAG,EAGEf,EAHFe,UACAC,EAEEhB,EAFFgB,aACAmP,EACEnQ,EADFmQ,SAGMlP,GAAkBwI,EAAAA,EAAAA,SAAqBvJ,EAAQK,GAA/CU,cACRqS,GAAwDC,EAAAA,EAAAA,SACtDrM,EACAhH,EACAK,EACAQ,EACAH,EACAJ,GANM2B,EAAUmR,EAAVnR,WAAYC,EAASkR,EAATlR,UAAWuQ,EAAoBW,EAApBX,qBAQzBrQ,GAAsBvB,GAAcA,GAAgC,IAAnBR,EAqCvD,OACE0D,EAAAA,cAAA,QACE9D,SArCiB,SAAC7H,GACpBA,EAAEkb,kBAEEtT,GAAWe,EAOXF,EACFC,GAAa,GAIfwD,EAAOC,eAXLtD,OAAOmD,SAASC,KAAO9D,CAY3B,EAsBIiE,UAAWC,IAAW,qBAAsB,CAAE5D,UAAAA,KAE9CkD,EAAAA,cAAA,OAAKS,UAAU,mBACbT,EAAAA,cAACwP,EAAAA,QAAW,CAACvM,SAAUA,IACvBjD,EAAAA,cAACyP,EAAAA,QAAgB,CAACxM,SAAUA,IAC5BjD,EAAAA,cAACW,EAAAA,QAAU,CACTC,UAAU,2BACVC,SAAS,4BACTC,QAAS,WAAF,OAAQ/D,GAAa,EAAK,KAGrCiD,EAAAA,cAAA,OAAKS,UAAU,oBACbT,EAAAA,cAAA,OAAKS,UAAU,iBACbT,EAAAA,cAAA,OACES,UAAU,kDACV,cAAY,kBAEXxE,EACC+D,EAAAA,cAAC0P,EAAAA,QAAuB,CACtBzM,SAAUA,EACVzG,WAAYA,IAGd2B,GAGJ6B,EAAAA,cAAA,OAAKS,UAAU,mBAAmByL,IAEpClM,EAAAA,cAAA,OAAKS,UAAU,mBACbT,EAAAA,cAAA,UACES,UAAS,2CAAArD,OACPT,EAA4B,SAAW,aAEzC,cAAY,iBACZ,iBArDJV,IAAWe,EACTL,GACKG,EACHwO,EAAAA,iDAAiDrI,GAGhDoI,EAAAA,uCAAuCpI,GAE5CtG,EACKG,EACHqO,EAAAA,oDAAoDlI,GACpDiI,EAAAA,0CAA0CjI,GAEzCgI,EAAAA,0CAA0ChI,GAyCzCrB,SAAU5E,GAAiBhB,EAC3B/F,KAAK,UAEJgG,GACC+D,EAAAA,cAAA,KACES,UAAU,yCACV,cAAY,cAGfzE,EAAU0S,EAAuBxQ,IAElCjC,GAAUoC,GACV2B,EAAAA,cAAA,OAAKS,UAAU,mDACZ3D,GAAgC,IAAnBR,GAAwB6B,GACpCrB,GACAkD,EAAAA,cAACiC,EAAAA,QAAc,CAACxB,UAAU,kDAQ1C,EAEAmF,EAAa1D,UAAY,CACvB3B,OAAQ4B,IAAAA,MAAgB,CACtB3B,aAAc2B,IAAAA,KAAeC,WAC7BrL,OAAQoL,IAAAA,OAAiBC,WACzBlB,OAAQiB,IAAAA,OACRwN,QAASxN,IAAAA,OACTyN,aAAczN,IAAAA,KAAeC,WAC7ByN,WAAY1N,IAAAA,KAAeC,WAC3B0N,aAAc3N,IAAAA,OACbC,WACHa,SAAUd,IAAAA,MAAgB3N,OAAOuC,OAAOmM,EAAAA,gBAAgBd,WACxDpG,QAASmG,IAAAA,KACTlG,OAAQkG,IAAAA,KACR7F,eAAgB6F,IAAAA,OAAiBC,WACjC7F,UAAW4F,IAAAA,OACX3F,WAAY2F,IAAAA,OACZxF,0BAA2BwF,IAAAA,KAAeC,WAC1CtF,UAAWqF,IAAAA,KAAeC,WAC1BrF,aAAcoF,IAAAA,KAAeC,WAC7B8J,SAAU/J,IAAAA,KAAeC,YAG3BwD,EAAavD,aAAe,CAC1BrG,SAAS,EACTC,QAAQ,EACRM,UAAW,GACXC,WAAY,0BAGd,sGCxKMiT,EAAmB,SAAHxQ,GACpB,OADkCA,EAARgE,UAExB,KAAKC,EAAAA,cAAcF,OACjB,OACEhD,EAAAA,cAAA,OAAKS,UAAU,cAAa,wFAKhC,KAAKyC,EAAAA,cAAcoC,qBACjB,OACEtF,EAAAA,cAAA,OAAKS,UAAU,cAAa,iHAKhC,KAAKyC,EAAAA,cAAcwH,eACjB,OACE1K,EAAAA,cAAA,OAAKS,UAAU,cAAa,2GAKhC,KAAKyC,EAAAA,cAAcgE,cACjB,OACElH,EAAAA,cAAA,OAAKS,UAAU,cAAa,0GAKhC,QACE,OAAO,KAEb,EAEAgP,EAAiBvN,UAAY,CAC3Be,SAAUd,IAAAA,MAAgB3N,OAAOuC,OAAOmM,EAAAA,gBAAgBd,YAG1D,sGCvCMoN,EAAc,SAAHvQ,GACf,OAD6BA,EAARgE,UAEnB,KAAKC,EAAAA,cAAcF,OACjB,OAAOhD,EAAAA,cAAA,OAAKS,UAAU,WAAU,oBAClC,KAAKyC,EAAAA,cAAcoC,qBACjB,OAAOtF,EAAAA,cAAA,OAAKS,UAAU,WAAU,iCAClC,KAAKyC,EAAAA,cAAcwH,eACjB,OAAO1K,EAAAA,cAAA,OAAKS,UAAU,WAAU,2BAClC,KAAKyC,EAAAA,cAAcgE,cACjB,OAAOlH,EAAAA,cAAA,OAAKS,UAAU,WAAU,0BAClC,QACE,OAAO,KAEb,EAEA+O,EAAYtN,UAAY,CACtBe,SAAUd,IAAAA,MAAgB3N,OAAOuC,OAAOmM,EAAAA,gBAAgBd,YAG1D,8lCCnBA,IAAM2N,EAAc,mDAEdC,EAAiB,CACrBC,UAAW,OACXC,QAASH,EACTI,MAAM,EACNC,UAAW,SACXC,SAAS,qQAADjT,OAIA2S,EAAW,kCAInBO,OAAQ,UACRC,QAAS,UAGI,SAAStO,EAAchD,GAAsB,IAADuR,EAAAvR,EAAlBwB,UAAAA,OAAS,IAAA+P,EAAG,GAAEA,EACI/T,EAAA/B,GAAfgC,EAAAA,EAAAA,WAAS,GAAM,GAAlD+T,EAAahU,EAAA,GAAEiU,EAAgBjU,EAAA,GAChCkU,GAAarJ,EAAAA,EAAAA,UACbsJ,GAAgBtJ,EAAAA,EAAAA,SAAO,GASvBuJ,EAAiB,WACrBzI,EAAEuI,EAAWhJ,SAASmJ,QAAQ,OAChC,EAkCA,OAxBAnT,EAAAA,EAAAA,YAAU,WACRyK,EAAEuI,EAAWhJ,SAASmJ,QAAQd,EAChC,GAAG,KAGHrS,EAAAA,EAAAA,YAAU,WACJ8S,EAbJrI,EAAEuI,EAAWhJ,SAASmJ,QAAQ,QAgB5BD,GAEJ,GAAG,CAACJ,KAGJ9S,EAAAA,EAAAA,YAAU,WAGR,OAFAT,OAAOO,iBAAiB,SAAUoT,GAE3B,WACL3T,OAAOQ,oBAAoB,SAAUmT,EACvC,CACF,GAAG,KAEHE,EAAAA,EAAAA,SAAuBJ,EAAYE,GAGjC7Q,EAAAA,cAAA,QAAMS,UAAWA,GAAW,eACb,IACbT,EAAAA,cAAA,QACES,UAAU,+DACVuQ,aAAc,WAAF,OAAQN,GAAkBE,EAAcjJ,QAAQ,EAC5DsJ,aAAc,WAAF,OAAQP,GAAiB,EAAM,EAC3C5P,QAAS,WAAF,OAAQ4P,GAAkBD,EAAc,EAC/CS,UArCgB,SAAC/G,IACrBgH,EAAAA,EAAAA,gBAAehH,GAAO,kBAAMuG,GAAkBD,EAAc,GAC9D,EAoCMW,aAjDiB,WACrBR,EAAcjJ,SAAU,CAC1B,EAgDMU,IAAKsI,EACLU,KAAK,SACLC,SAAU,GACX,MAEO,IAAI,2BAIlB,8FClFM5B,EAA0B,SAAHzQ,GAAkC,IAA5BgE,EAAQhE,EAARgE,SAAUzG,EAAUyC,EAAVzC,WACrC+U,EAAyBxG,EAAAA,iCAAiC9H,GAEhE,OAAQA,GACN,KAAKC,EAAAA,cAAcF,OACjB,OACEhD,EAAAA,cAAA,KAAGM,KAAM9D,EAAY,iBAAgB+U,GAAwB,OACtDxQ,EAAAA,iBAAiB,sBAG5B,KAAKmC,EAAAA,cAAcoC,qBACnB,KAAKpC,EAAAA,cAAcwH,eACnB,KAAKxH,EAAAA,cAAcgE,cACjB,OACElH,EAAAA,cAAAA,EAAAA,SAAA,KAAE,OACKe,EAAAA,iBAAiB,oCAAkC,IACxDf,EAAAA,cAAA,KAAGM,KAAM9D,EAAY,iBAAgB+U,GAAwB,IAC1DvR,EAAAA,cAAA,WAAK,KAAO,aAIrB,QACE,OAAO,KAEb,EAEA0P,EAAwBxN,UAAY,CAClC1F,WAAY2F,IAAAA,OAAiBC,WAC7Ba,SAAUd,IAAAA,MAAgB3N,OAAOuC,OAAOmM,EAAAA,gBAAgBd,YAG1D,wECzBA,QAZ4B,WAC1B,OACEpC,EAAAA,cAAA,OAAKS,UAAU,6BACbT,EAAAA,cAAA,OAAKS,UAAU,iBACbT,EAAAA,cAAA,cAAQ,eAAoB,qFAMpC,gGCgCA,QAvCuB,SAAHf,GAQb,IAPLoK,EAASpK,EAAToK,UACApG,EAAQhE,EAARgE,SACAhH,EAAMgD,EAANhD,OACA2G,EAAW3D,EAAX2D,YACAtG,EAAc2C,EAAd3C,eACA6M,EAAalK,EAAbkK,cACA3M,EAAUyC,EAAVzC,WAEA,OACEwD,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAAA,OAAKS,UAAU,2BACbT,EAAAA,cAAA,OAAKS,UAAU,cACfT,EAAAA,cAAA,OAAKS,UAAU,kCAAiC,2BAGhDT,EAAAA,cAACwR,EAAAA,QAAyB,CACxBvO,SAAUA,EACVkG,cAAeA,EACfE,UAAWA,KAGfrJ,EAAAA,cAACyR,EAAAA,QAAqB,CACpBnV,eAAgBA,EAChB+M,UAAWA,EACXpG,SAAUA,EACVzG,WAAYA,EACZP,OAAQA,EACR2G,YAAaA,IAEf5C,EAAAA,cAAC0R,EAAAA,QAAqB,CACpBzO,SAAUA,EACVhH,OAAQA,EACRoN,UAAWA,IAInB,kHChCMoI,EAAwB,SAAHxS,GAOpB,IANLoK,EAASpK,EAAToK,UACApN,EAAMgD,EAANhD,OACAK,EAAc2C,EAAd3C,eACAE,EAAUyC,EAAVzC,WACAyG,EAAQhE,EAARgE,SACAL,EAAW3D,EAAX2D,YAEQjG,GAA8BuI,EAAAA,EAAAA,WAA9BvI,0BACF8L,EAAe2C,EAAAA,uCAAuCnI,GAE5D,OAAQA,GACN,KAAKC,EAAAA,cAAcF,OACjB,OAAIqG,EACEpN,EAEA+D,EAAAA,cAAA,WACEA,EAAAA,cAAA,KACEM,KAAM9D,EACN,iBAAe,iCAChB,OACMuE,EAAAA,iBAAiB,wBAM5Bf,EAAAA,cAAA,OAAKS,UAAU,uBACbT,EAAAA,cAACiC,EAAAA,QAAc,OAMnBjC,EAAAA,cAAA,MAAIS,UAAU,iCACXxE,GACC+D,EAAAA,cAAA,UACEA,EAAAA,cAAA,KAAGM,KAAM9D,EAAY,iBAAgBiM,GAAc,0BAC1BzI,EAAAA,cAAA,WAAK,QAIhC/D,GAAUK,EAAiB,GAC3B0D,EAAAA,cAAA,MAAIS,UAAU,mCAAkC,sBAIlDT,EAAAA,cAAA,UAAI,kCACJA,EAAAA,cAAA,UAAI,0CAGV,KAAKkD,EAAAA,cAAcoC,qBACjB,OACEtF,EAAAA,cAAA,MAAIS,UAAU,iCACXxE,GAAU2G,GACT5C,EAAAA,cAAA,UACEA,EAAAA,cAAA,KAAGM,KAAM9D,EAAY,iBAAgBiM,GAAc,yBAC3BzI,EAAAA,cAAA,WAAK,KAAO,aAIvC/D,IAAW2G,GACV5C,EAAAA,cAAA,UACEA,EAAAA,cAAA,KAAGM,KAAM9D,EAAY,iBAAgBiM,GAAc,0BAC1BzI,EAAAA,cAAA,WAAK,KAAO,cAIvC/D,GAAUU,GACVqD,EAAAA,cAAA,UAAI,qCAENA,EAAAA,cAAA,UAAI,uCACJA,EAAAA,cAAA,UAAI,kCAGV,KAAKkD,EAAAA,cAAcwH,eACjB,OACE1K,EAAAA,cAAA,MAAIS,UAAU,iCACXxE,GAAU2G,GACT5C,EAAAA,cAAA,UACEA,EAAAA,cAAA,KAAGM,KAAM9D,EAAY,iBAAgBiM,GAAc,yBAC3BzI,EAAAA,cAAA,WAAK,KAAO,aAIvC/D,IAAW2G,GACV5C,EAAAA,cAAA,UACEA,EAAAA,cAAA,KAAGM,KAAM9D,EAAY,iBAAgBiM,GAAc,0BAC1BzI,EAAAA,cAAA,WAAK,KAAO,cAIvC/D,GAAUU,GACVqD,EAAAA,cAAA,UAAI,qCAENA,EAAAA,cAAA,UAAI,iCACJA,EAAAA,cAAA,UAAI,4BAGV,KAAKkD,EAAAA,cAAcgE,cACjB,OACElH,EAAAA,cAAA,MAAIS,UAAU,iCACXxE,GAAU2G,GACT5C,EAAAA,cAAA,UACEA,EAAAA,cAAA,KAAGM,KAAM9D,EAAY,iBAAgBiM,GAAc,yBAC3BzI,EAAAA,cAAA,WAAK,KAAO,aAIvC/D,IAAW2G,GACV5C,EAAAA,cAAA,UACEA,EAAAA,cAAA,KAAGM,KAAM9D,EAAY,iBAAgBiM,GAAc,0BAC1BzI,EAAAA,cAAA,WAAK,KAAO,cAIvC/D,GAAUU,GACVqD,EAAAA,cAAA,UAAI,mCAENA,EAAAA,cAAA,UAAI,kCACJA,EAAAA,cAAA,UAAI,2BAGV,QACE,OAAO,KAEb,EAEAyR,EAAsBvP,UAAY,CAChC5F,eAAgB6F,IAAAA,OAAiBC,WACjC5F,WAAY2F,IAAAA,OAAiBC,WAC7BnG,OAAQkG,IAAAA,KAAeC,WACvBQ,YAAaT,IAAAA,KACbc,SAAUd,IAAAA,MAAgB3N,OAAOuC,OAAOmM,EAAAA,gBAAgBd,YAG1DqP,EAAsBpP,aAAe,CACnCO,aAAa,GAGf,sGClJM4O,EAA4B,SAAHvS,GAAgD,IAA1CgE,EAAQhE,EAARgE,SAAUkG,EAAalK,EAAbkK,cAAeE,EAASpK,EAAToK,UAC5D,OAAQpG,GACN,KAAKC,EAAAA,cAAcF,OACjB,OAAOqG,EACLrJ,EAAAA,cAAA,OAAKS,UAAU,wCAAuC,qGAExBT,EAAAA,cAAA,SAAImJ,GAAkB,4CAIpDnJ,EAAAA,cAAA,OAAKS,UAAU,wCAAuC,kNAO1D,KAAKyC,EAAAA,cAAcoC,qBACjB,OACEtF,EAAAA,cAAA,OAAKS,UAAU,wCAAuC,iLAM1D,KAAKyC,EAAAA,cAAcwH,eACjB,OACE1K,EAAAA,cAAA,OAAKS,UAAU,wCAAuC,sLAM1D,KAAKyC,EAAAA,cAAcgE,cACjB,OACElH,EAAAA,cAAA,OAAKS,UAAU,wCAAuC,+LAM1D,QACE,OAAO,KAEb,EAEA+Q,EAA0BtP,UAAY,CACpCmH,UAAWlH,IAAAA,KACXgH,cAAehH,IAAAA,OACfc,SAAUd,IAAAA,MAAgB3N,OAAOuC,OAAOmM,EAAAA,gBAAgBd,YAG1D,mdC/CMsP,EAAwB,SAAHzS,GAAyC,IAAnChD,EAAMgD,EAANhD,OAAQgH,EAAQhE,EAARgE,SAAUoG,EAASpK,EAAToK,UACjD,OAAQpG,GACN,KAAKC,EAAAA,cAAcF,OACjB,OAAIqG,EACK,KAGLpN,EAEA+D,EAAAA,cAAA,OAAKS,UAAU,UACbT,EAAAA,cAAA,YAAM,yCACNA,EAAAA,cAAA,OACES,UAAU,wBACVkR,IAAKC,EACLC,IAAI,4BAOV7R,EAAAA,cAAA,OAAKS,UAAU,iBAAgB,kEAInC,KAAKyC,EAAAA,cAAcoC,qBACjB,OAAOrJ,EACL+D,EAAAA,cAAA,OAAKS,UAAU,UACbT,EAAAA,cAAA,YAAM,0DACNA,EAAAA,cAAA,OACES,UAAU,wBACVkR,IAAKG,EACLD,IAAI,4BAGN,KACN,KAAK3O,EAAAA,cAAcwH,eACjB,OAAOzO,EACL+D,EAAAA,cAAA,OAAKS,UAAU,UACbT,EAAAA,cAAA,YAAM,oDACNA,EAAAA,cAAA,OACES,UAAU,wBACVkR,IAAKI,EACLF,IAAI,4BAGN,KACN,KAAK3O,EAAAA,cAAcgE,cACjB,OAAOjL,EACL+D,EAAAA,cAAA,OAAKS,UAAU,UACbT,EAAAA,cAAA,YAAM,mDACNA,EAAAA,cAAA,OACES,UAAU,wBACVkR,IAAKK,EACLH,IAAI,4BAGN,KACN,QACE,OAAO,KAEb,EAEAH,EAAsBxP,UAAY,CAChCjG,OAAQkG,IAAAA,KAAeC,WACvBa,SAAUd,IAAAA,MAAgB3N,OAAOuC,OAAOmM,EAAAA,gBAAgBd,WACxDiH,UAAWlH,IAAAA,KAAeC,YAG5B,u0CCzEA,IAAMF,EAAY,CAChB+P,UAAW9P,IAAAA,OAMb,SAAS+P,EAAcjT,GAA+B,IAA5BkT,EAAUlT,EAAVkT,WAAYC,EAAWnT,EAAXmT,YACpC,OACEpS,EAAAA,cAAA,OAAKS,UAAU,8BACbT,EAAAA,cAAA,OACE6R,IAAI,0BACJpR,UAAU,yBACVkR,IAAKS,IAEPpS,EAAAA,cAAA,OAAKS,UAAU,gCACbT,EAAAA,cAAA,QAAMS,UAAU,UAAS,qCACzBT,EAAAA,cAAA,QAAMS,UAAU,UAAS,2BAE3BT,EAAAA,cAAA,KACES,UAAU,oDACVH,KAAM6R,GACP,iBAKP,CAEe,SAASE,EAAY9D,GAIhC,IAHS+D,EAAkB/D,EAA7B0D,UACAE,EAAU5D,EAAV4D,WACAC,EAAW7D,EAAX6D,YAE8D3V,EAAA/B,GAA5BgC,EAAAA,EAAAA,UAAS4V,GAAmB,GAAvDL,EAASxV,EAAA,GAAE8V,EAAY9V,EAAA,GACxB+V,EACJP,EAAU/Y,OAAS,EAAC,gBAAAkE,OACA6U,EAAU/Y,OAAM,yBAChC,oCAEAuZ,EAAuB,SAACC,GAC5B,IAAMC,GAAeC,EAAAA,EAAAA,QACnBX,GACA,SAACY,GAAQ,OAAKA,EAASH,aAAeA,CAAU,IAElDH,EAAaI,EACf,EAEA,OACE3S,EAAAA,cAAA,WACGiS,EAAU/Y,OAAS,EAClB8G,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAAA,OAAKS,UAAU,kCAAkC+R,GACjDxS,EAAAA,cAAA,OAAKS,UAAU,cACbT,EAAAA,cAAA,OAAKS,UAAU,8BACbT,EAAAA,cAAA,MAAIS,UAAU,+CACZT,EAAAA,cAAA,MAAIS,UAAU,qBACZT,EAAAA,cAAA,MAAIS,UAAU,sBACZT,EAAAA,cAAA,OAAKS,UAAU,OACZwR,EAAUa,KAAI,SAACD,EAAUE,GAAK,OAC7B/S,EAAAA,cAAA,OACES,UAAU,iDACVlC,IAAKsU,EAAStI,MAEdvK,EAAAA,cAAA,MAAIS,UAAU,qBACZT,EAAAA,cAACgT,EAAAA,QAAOzP,EAAA,GACFsP,EAAQ,CACZI,gBAAc,EACdF,MAAOA,EACPG,UAAWT,EACXU,aAAW,EACXC,cAAY,MAGZ,WAUtBpT,EAAAA,cAACkS,EAAc,CAACC,WAAYA,EAAYC,YAAaA,IAI7D,CAEAC,EAAanQ,UAAYA,m1DC3FyB,IAE5CmR,EAAsB,SAAAC,GAY1B,SAAAD,EAAYtX,GAAQ,IAADwX,EAiCf,OAjCeC,EAAA,KAAAH,IACjBE,EAAAE,EAAA,KAAAJ,EAAA,CAAMtX,KAED2X,iBAAmB,SAACrf,GACvB,IAAK0H,EAAM4X,aAGT,OAFAtf,EAAEkb,sBACFxT,EAAM6X,mBAIR,IAAQ7R,EAAW1N,EAAX0N,OAEJA,EAAO8R,QACTN,EAAKO,SAAS,CAAEC,SAAUR,EAAKS,MAAMD,SAAS3W,OAAO,CAAC2E,EAAOjN,UAE7Dye,EAAKO,SAAS,CACZC,SAAUR,EAAKS,MAAMD,SAASE,QAAO,SAAC1d,GAAC,OAAKA,IAAMwL,EAAOjN,KAAK,KAGpE,EAEAye,EAAKW,kBAAoB,SAAC7f,GACnB0H,EAAM4X,aAKXJ,EAAKO,SAAS,CAAEK,YAAaZ,EAAKS,MAAMG,aAJtCpY,EAAM6X,kBAKV,EAEAL,EAAKS,MAAQ,CACXG,YAAY,EACZJ,SAAU,IACVR,CACJ,CAAC,OAAAa,EAAAf,EAAAC,GAAAe,EAAAhB,EAAA,EAAA9U,IAAA,qBAAAzJ,MAED,SAAmBwf,EAAWC,GAE1BC,KAAKR,MAAMD,SAAS7a,SAAWqb,EAAUR,SAAS7a,QAClDsb,KAAKzY,MAAMyF,UAEXgT,KAAKzY,MAAMyF,SAASgT,KAAKR,MAAMD,SAEnC,GAAC,CAAAxV,IAAA,sBAAAzJ,MAED,WACE,IAAQqf,EAAeK,KAAKR,MAApBG,WACRM,EAAiCD,KAAKzY,MAA9BiT,EAAMyF,EAANzF,OAER,OAF4ByF,EAAZC,cAEI,EACX,KAIP1U,EAAAA,cAAA,UACES,UAAU,oEACVK,QAAS0T,KAAKN,mBAAkB,OAAA9W,OAExB+W,EAAa,OAAS,OAAM,KAAA/W,OAAI4R,EAAOzK,cAAa,KAGlE,GAAC,CAAAhG,IAAA,SAAAzJ,MAED,WAAU,IAAD6f,EAAA,KACCR,EAAeK,KAAKR,MAApBG,WACRS,EAAiDJ,KAAKzY,MAA9CiT,EAAM4F,EAAN5F,OAAQ6F,EAAcD,EAAdC,eAAgBH,EAAYE,EAAZF,aAC1BI,EAAgBN,KAAKzY,MAArB+Y,YAMN,OAJKX,IACHW,EAAcA,EAAY5a,MAAM,EAAG,IAInC8F,EAAAA,cAAA,OAAKS,UAAU,aAAa3C,MAAO,CAAEiX,SAAU,aAC5CF,GAAkB7U,EAAAA,cAAA,OAAKS,UAAU,UAAU3C,MAAO,CAAEkX,OAAQ,OAC7DhV,EAAAA,cAAA,OAAKS,UAAU,qBACZuO,EAAO,KAAG0F,EAAa,KAE1B1U,EAAAA,cAAA,MAAIS,UAAU,sBACXqU,EAAYhC,KAAI,SAACxc,GAAC,OACjB0J,EAAAA,cAAA,MAAIS,UAAU,aAAalC,IAAKjI,EAAEgO,OAChCtE,EAAAA,cAACiV,EAAAA,QAAQ,CACP3Q,MAAK,GAAAlH,OAAK9G,EAAEgO,MAAK,MAAAlH,OAAK9G,EAAE4e,MAAK,KAC7B5b,KAAI,mBAAA8D,OAAqB9G,EAAEgO,MACxBC,cACAgI,QAAQ,MAAO,MAClB/K,SAAUmT,EAAKjB,iBACf5e,MAAOwB,EAAEgO,QAER,KAGRkQ,KAAKW,sBAGZ,IAAC,CA3GyB,CAASnV,EAAAA,WAA/BqT,EACGnR,UAAY,CACjB4S,YAAa3S,IAAAA,MAAgBC,WAC7B4M,OAAQ7M,IAAAA,OAAiBC,WACzByS,eAAgB1S,IAAAA,KAAeC,WAC/BuR,aAAcxR,IAAAA,KAAeC,WAC7BgT,WAAYjT,IAAAA,KAAeC,WAC3BZ,SAAUW,IAAAA,KACVyR,iBAAkBzR,IAAAA,KAAeC,WACjCsS,aAAcvS,IAAAA,OAAiBC,YAC/B,IAoGiBiT,EAAa,SAAAC,GAiBhC,SAAAD,EAAYtZ,GAAQ,IAADwZ,EAgBf,OAhBe/B,EAAA,KAAA6B,IACjBE,EAAA9B,EAAA,KAAA4B,EAAA,CAAMtZ,KAEDyZ,kBAAoB,SAACnhB,GACxBkhB,EAAKzB,SAAS,CAAE2B,qBAAqB,GACvC,EAEAF,EAAK3B,iBAAmB,WACtB2B,EAAKzB,SAAS,CAAE2B,qBAAqB,GACvC,EAEAF,EAAKvB,MAAQ,CACX0B,gBAAiB,GACjBC,cAAe,GACfC,eAAgB7Z,EAAM8Z,cACtBJ,qBAAqB,GACrBF,CACJ,CAAC,OAAAnB,EAAAiB,EAAAC,GAAAjB,EAAAgB,EAAA,EAAA9W,IAAA,qBAAAzJ,MAED,SAAmBwf,EAAWC,GAC5B,IAAAuB,EAA2CtB,KAAKR,MAAxC0B,EAAeI,EAAfJ,gBAAiBC,EAAaG,EAAbH,cACzB,GACED,EAAgBxc,SAAWqb,EAAUmB,gBAAgBxc,QACrDyc,EAAczc,SAAWqb,EAAUoB,cAAczc,OACjD,CACA,IAAI0c,EAAiB,GACrB,GAAIF,EAAgBxc,QAAUyc,EAAczc,OAAQ,CAClD,IAAMjE,EAAIuf,KAAKuB,sBAAsBL,GAC/BM,EAAIxB,KAAKuB,sBAAsBJ,GACrCC,EAAiBpB,KAAKzY,MAAM8Z,cAAc5B,QACxC,SAAC3f,GAAC,OAAKW,EAAEX,EAAE2hB,qBAAuBD,EAAE1hB,EAAE4hB,UAAU,GAEpD,MACEN,EAAiBpB,KAAKzY,MAAM8Z,cAE9BrB,KAAKV,SAAS,CAAE8B,eAAAA,GAClB,CACF,GAAC,CAAArX,IAAA,wBAAAzJ,MAED,SAAsBif,GACpB,OAAOA,EAASoC,QAAO,SAAC/f,EAAGggB,GAEzB,OADAhgB,EAAEggB,IAAK,EACAhgB,CACT,GAAG,CAAC,EACN,GAAC,CAAAmI,IAAA,kBAAAzJ,MAED,SAAemK,GAA8C,IAADoX,EAAA,KAA1CvB,EAAW7V,EAAX6V,YAAa9F,EAAM/P,EAAN+P,OAAQzQ,EAAGU,EAAHV,IAAKmW,EAAYzV,EAAZyV,aAC1C4B,EAA8D9B,KAAKzY,MAA3Dwa,EAAeD,EAAfC,gBAAiBC,EAAkBF,EAAlBE,mBAAoB7C,EAAY2C,EAAZ3C,aAE7C,OACE3T,EAAAA,cAACqT,EAAsB,CACrBkD,gBAAiBA,EACjBC,mBAAoBA,EACpB1B,YAAaA,EACb9F,OAAQA,EACR6F,eAAgBL,KAAKR,MAAMyB,oBAC3B9B,aAAcA,EACdnS,SAAU,SAACuS,GAAQ,OAAKsC,EAAKvC,YAAS,CAAC,IAAQC,SAANxV,2GAAiB,EAC1DqV,iBAAkBY,KAAKZ,iBACvBc,aAAcA,GAGpB,GAAC,CAAAnW,IAAA,qBAAAzJ,MAED,WACE,IAAK0f,KAAKR,MAAMyB,oBACd,OAAO,KAGT,IAAAgB,EAA4DjC,KAAKzY,MAAzDwa,EAAeE,EAAfF,gBAAiBC,EAAkBC,EAAlBD,mBAAoBpB,EAAUqB,EAAVrB,WAE7C,OACEpV,EAAAA,cAAA,OAAKS,UAAU,gBAAgBU,GAAG,oBAChCnB,EAAAA,cAAC0W,EAAAA,QAAW,CACVtB,WAAYA,EACZlF,QAAQ,gCACR5P,KAAMiW,EACN9N,aAAa,+BACbkO,QAASH,EACTzW,YAAayU,KAAKgB,kBAClBoB,sBAAoB,IAI5B,GAAC,CAAArY,IAAA,gBAAAzJ,MAED,WACE,IAAA+hB,EAKIrC,KAAKzY,MAJP+a,EAAqBD,EAArBC,sBACAC,EAAiBF,EAAjBE,kBACAC,EAAmBH,EAAnBG,oBACAC,EAAeJ,EAAfI,gBAEF,OACEjX,EAAAA,cAAA,OAAKS,UAAU,WACbT,EAAAA,cAAA,OAAKS,UAAU,mBACbT,EAAAA,cAAA,OAAKS,UAAU,kBAAiB,6BAEjC+T,KAAK0C,gBAAgB,CACpBpC,YAAamC,EACb1Y,IAAK,gBACLyQ,OAAQ,aACR0F,aAAcsC,IAEfxC,KAAK0C,gBAAgB,CACpBpC,YAAaiC,EACbxY,IAAK,kBACLyQ,OAAQ,SACR0F,aAAcoC,IAEftC,KAAK2C,qBAGZ,GAAC,CAAA5Y,IAAA,4BAAAzJ,MAED,WACE,IAAQsiB,EAAc5C,KAAKzY,MAAnBqb,UAER,OACEpX,EAAAA,cAAA,OAAKmB,GAAG,yBAAyBV,UAAU,aACzCT,EAAAA,cAAA,OAAKS,UAAU,qBACbT,EAAAA,cAAA,OAAKS,UAAU,oBAAmB,2BAEpCT,EAAAA,cAAA,OAAKS,UAAU,mBACbT,EAAAA,cAAA,OAAKS,UAAU,kBACbT,EAAAA,cAAA,KAAGM,KAAM8W,EAAUC,KAAM5W,UAAU,cACjCT,EAAAA,cAAA,QACES,UAAU,aACV6W,wBAAyB,CAAEC,OAAQH,EAAUI,kBAE/CxX,EAAAA,cAAA,QACES,UAAU,YACV6W,wBAAyB,CAAEC,OAAQH,EAAUK,mBAInDzX,EAAAA,cAAA,OAAKS,UAAU,kBACbT,EAAAA,cAAA,OAAKS,UAAU,eACbT,EAAAA,cAAA,KAAGM,KAAM8W,EAAUC,KAAM5W,UAAU,oBAChC2W,EAAU3b,OACR,IAAI,KACN,IACHuE,EAAAA,cAAA,KAAGM,KAAM8W,EAAUM,SAAUjX,UAAU,QACpC2W,EAAUlB,WACR,IAAI,MACLkB,EAAUnB,sBAM1B,GAAC,CAAA1X,IAAA,0BAAAzJ,MAED,WACE,OAAK0f,KAAKzY,MAAM4X,aAIWa,KAAKR,MAAxB4B,eAEc9C,KAAI,SAACxe,GAAC,OAC1B0L,EAAAA,cAAA,OAAKS,UAAU,YAAYlC,IAAKjK,EAAE+iB,MAChCrX,EAAAA,cAAA,OAAKS,UAAU,mBACbT,EAAAA,cAAA,OAAKS,UAAU,kBACbT,EAAAA,cAAA,KAAGM,KAAMhM,EAAE+iB,KAAM5W,UAAU,cACzBT,EAAAA,cAAA,QACES,UAAU,aACV6W,wBAAyB,CAAEC,OAAQjjB,EAAEkjB,kBAEvCxX,EAAAA,cAAA,QACES,UAAU,YACV6W,wBAAyB,CAAEC,OAAQjjB,EAAEmjB,mBAI3CzX,EAAAA,cAAA,OAAKS,UAAU,kBACbT,EAAAA,cAAA,OAAKS,UAAU,eACbT,EAAAA,cAAA,KAAGM,KAAMhM,EAAE+iB,KAAM5W,UAAU,oBACxBnM,EAAEmH,OACA,IAAI,KACN,IACHuE,EAAAA,cAAA,KAAGM,KAAMhM,EAAEojB,SAAUjX,UAAU,QAC5BnM,EAAE4hB,WACA,IAAI,MACL5hB,EAAE2hB,oBAERjW,EAAAA,cAAA,KACES,UAAU,2EACV6W,wBAAyB,CAAEC,OAAQjjB,EAAEqjB,mBAEvC3X,EAAAA,cAAA,OAAKS,UAAU,aACbT,EAAAA,cAAA,KAAGM,KAAMhM,EAAE+iB,KAAM5W,UAAU,QAAO,oBACdnM,EAAEmH,UAKxB,IA1CC,IA4CX,GAAC,CAAA8C,IAAA,0BAAAzJ,MAED,WACE,GAAI0f,KAAKzY,MAAM4X,aACb,OAAO,KAGT,IAAQiE,EAAwBpD,KAAKzY,MAA7B6b,oBAER,OACE5X,EAAAA,cAAA,WACEA,EAAAA,cAAA,OAAK2R,IAAKiG,EAAqB9Z,MAAO,CAAE+Z,SAAU,UAClD7X,EAAAA,cAAA,OAAK2R,IAAKiG,EAAqB9Z,MAAO,CAAE+Z,SAAU,UAGxD,GAAC,CAAAtZ,IAAA,cAAAzJ,MAED,WACE,GAAI0f,KAAKzY,MAAM4X,aACb,OAAO,KAGT,IAAAmE,EACEtD,KAAKzY,MADCgc,EAAkBD,EAAlBC,mBAAoBxB,EAAeuB,EAAfvB,gBAAiBC,EAAkBsB,EAAlBtB,mBAG7C,OACExW,EAAAA,cAAA,WACEA,EAAAA,cAAC0W,EAAAA,QAAW,CACVxG,QAAS6H,EACTzX,KAAMiW,EACN9N,aAAa,sCACbkO,QAASH,IAIjB,GAAC,CAAAjY,IAAA,gBAAAzJ,MAED,WACE,IAAAkjB,EAA8CxD,KAAKzY,MAA3C8Z,EAAamC,EAAbnC,cAAeoC,EAAkBD,EAAlBC,mBACfrC,EAAmBpB,KAAKR,MAAxB4B,eAER,OAAOC,EAAc3c,OAAS0c,EAAe1c,OAAS+e,CACxD,GAAC,CAAA1Z,IAAA,sBAAAzJ,MAED,WACE,OACEkL,EAAAA,cAAA,OAAKS,UAAU,cACbT,EAAAA,cAAA,OAAKS,UAAU,wBAAwBU,GAAG,kBACxCnB,EAAAA,cAAA,OAAKS,UAAU,SACbT,EAAAA,cAAA,OAAKS,UAAU,qBACbT,EAAAA,cAAA,OAAKS,UAAU,oBACbT,EAAAA,cAAA,QAAMmB,GAAG,uBAAuBqT,KAAK0D,iBAAwB,IAAI,mCAGnElY,EAAAA,cAAA,OAAKS,UAAU,uBAAsB,mDAIvCT,EAAAA,cAAA,OAAKS,UAAU,kBACZ+T,KAAK2D,0BACL3D,KAAK4D,0BACL5D,KAAK6D,iBAMlB,GAAC,CAAA9Z,IAAA,SAAAzJ,MAED,WACE,OACEkL,EAAAA,cAAA,OAAKS,UAAU,WACbT,EAAAA,cAAA,OAAKS,UAAU,aACbT,EAAAA,cAAA,OAAKS,UAAU,OACbT,EAAAA,cAAA,OAAKS,UAAU,sBAAsB+T,KAAK8D,iBAC1CtY,EAAAA,cAAA,OAAKS,UAAU,sBACZ+T,KAAK+D,4BACL/D,KAAKgE,yBAMlB,IAAC,CA3S+B,CAASxY,EAAAA,WAAtBqV,EACZnT,UAAY,CACjB6V,mBAAoB5V,IAAAA,OAAiBC,WACrCmU,gBAAiBpU,IAAAA,OAAiBC,WAClCoU,mBAAoBrU,IAAAA,OAAiBC,WACrCwV,oBAAqBzV,IAAAA,OACrB2U,sBAAuB3U,IAAAA,OAAiBC,WACxCsT,gBAAiBvT,IAAAA,MAAgBC,WACjC4U,oBAAqB7U,IAAAA,OAAiBC,WACtCuT,cAAexT,IAAAA,MAAgBC,WAC/BuR,aAAcxR,IAAAA,KAAeC,WAC7BgT,WAAYjT,IAAAA,KAAeC,WAC3BgV,UAAWjV,IAAAA,OAAiBC,WAC5ByT,cAAe1T,IAAAA,MAAgBC,WAC/B6V,mBAAoB9V,IAAAA,OAAiBC,q2CC/HzC,IACMqW,EAA0B,SAAAnF,GAAA,SAAAmF,IAAA,mGAAAjF,CAAA,KAAAiF,GAAAhF,EAAA,KAAAgF,EAAA/Y,UAAA,6RAAA0U,CAAAqE,EAAAnF,KAAAmF,KAAA,EAAAla,IAAA,SAAAzJ,MAU9B,WACE,OACEkL,EAAAA,cAAA,WACEA,EAAAA,cAAA,OAAKS,UAAU,qCACbT,EAAAA,cAAA,OAAKS,UAAU,aACbT,EAAAA,cAAA,OACE6R,IAAI,iBACJpR,UAAU,QACVkR,IAAK6C,KAAKzY,MAAM4a,WAGpB3W,EAAAA,cAAA,OAAKS,UAAU,cACbT,EAAAA,cAAA,OACE6R,IAAI,iBACJpR,UAAU,QACVkR,IAAK6C,KAAKzY,MAAM2c,cAItB1Y,EAAAA,cAAA,OAAKS,UAAU,8CACbT,EAAAA,cAAA,KACES,UAAU,yBACV6W,wBAAyB,CAAEC,OAAQ/C,KAAKzY,MAAMmU,WAEhDlQ,EAAAA,cAAA,KACES,UAAS,iEAAArD,OACPoX,KAAKzY,MAAM4c,aAAe,IAE5BrY,KAAMkU,KAAKzY,MAAMuE,KACjB,iBAAe,6BAEfN,EAAAA,cAAA,KAAGS,UAAU,2CAA2C,OACpDT,EAAAA,cAAA,QAAMS,UAAU,aAAY,cAAiB,IAACT,EAAAA,cAAA,WAAK,QAGzDwU,KAAKzY,MAAMqZ,YACXpV,EAAAA,cAAA,OAAKS,UAAU,gDACbT,EAAAA,cAAA,OAAKS,UAAU,0BACbT,EAAAA,cAAA,QAAMS,UAAU,gCAA+B,OAC/CT,EAAAA,cAAA,KAAGM,KAAK,YAAW,aAM/B,+FAAC,CAvD6B,CAASN,EAAAA,WAAnCyY,EACGvW,UAAY,CACjBgO,QAAS/N,IAAAA,OACT7B,KAAM6B,IAAAA,OAAiBC,WACvBuW,YAAaxW,IAAAA,OACbwU,QAASxU,IAAAA,OACTuW,UAAWvW,IAAAA,OACXiT,WAAYjT,IAAAA,KAAeC,YAmD/B,iHCzDe,SAASwW,EAA0B3Z,GAAwB,IAArBtD,EAAQsD,EAARtD,SAAUkd,EAAM5Z,EAAN4Z,OAC7D,OACE7Y,EAAAA,cAAC8Y,EAAAA,QAAU,CAACC,oBAAoB,+BAC9B/Y,EAAAA,cAACgZ,EAAAA,QAAgB,CAACrd,SAAUA,EAAUkd,OAAQA,IAGpD,CACAD,EAA2B1W,UAAY,CACrCvG,SAAUwG,IAAAA,OACV0W,OAAQ1W,IAAAA,yFCXK,SAAS6W,EAAiBjd,GACvC,OACEiE,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAAA,OAAKS,UAAU,gCACbT,EAAAA,cAAA,OAAKS,UAAU,+BAA+B1E,EAAMJ,UACpDqE,EAAAA,cAAA,OACES,UAAS,wDAAArD,OACPrB,EAAMkd,WAAa,aAAe,mBAIxCjZ,EAAAA,cAAA,OACES,UAAU,6BACV6W,wBAAyB,CAAEC,OAAQxb,EAAM8c,UAIjD,CACAG,EAAiB9W,UAAY,CAC3BvG,SAAUwG,IAAAA,OAAiBC,WAC3ByW,OAAQ1W,IAAAA,OAAiBC,qFCT3B,QAXoB,SAAHnD,GAAA,IAAM8T,EAAK9T,EAAL8T,MAAOmG,EAAcja,EAAdia,eAAc,OAC1ClZ,EAAAA,cAAA,OAAKS,UAAS,GAAArD,OAAe,IAAV2V,EAAc,QAAU,GAAE,SAC3C/S,EAAAA,cAAA,QAAMS,UAAU,wBAAwByY,EAAezd,MAAM,KAC7DuE,EAAAA,cAAA,OAAKS,UAAU,yCACZyY,EAAeC,SAASrG,KAAI,SAACsG,GAAO,OACnCpZ,EAAAA,cAACqZ,EAAAA,QAAQ,CAAC9a,IAAK6a,EAAQjY,GAAIiY,QAASA,GAAW,KAG/C,2ECGR,QAXqB,SAAHna,GAAA,IAAMqa,EAAera,EAAfqa,gBAAe,OACrCtZ,EAAAA,cAAA,OAAKS,UAAU,6BACZ6Y,EAAgBpgB,OACfogB,EAAgBxG,KAAI,SAACyG,EAAIxG,GAAK,OAC5B/S,EAAAA,cAACwZ,EAAAA,QAAW,CAACzG,MAAOA,EAAOxU,IAAKgb,EAAGpY,GAAI+X,eAAgBK,GAAM,IAG/DvZ,EAAAA,cAAA,MAAIS,UAAU,0BAAyB,eAErC,6lCC2CR,QAlDgB,SAAHxB,GAON,IANLwa,EAAWxa,EAAXwa,YACAC,EAAaza,EAAbya,cACAC,EAAQ1a,EAAR0a,SACAL,EAAera,EAAfqa,gBACAH,EAAQla,EAARka,SACAS,EAAQ3a,EAAR2a,SAEMC,GAAiBC,EAAAA,EAAAA,UACrB,kBACEX,EAASlF,QACP,SAAC8F,GAAI,OACHA,EAAKxP,OAASoP,EAAS7kB,OACvB6kB,EAAS7kB,QAAU4kB,EAAc,GAAG5kB,KAAK,GAC5C,GACH,CAAC6kB,IAEGK,GAAwBF,EAAAA,EAAAA,UAC5B,kBACEL,EACI,GACAH,EACGrF,QAAO,SAACsF,GAAE,OACTA,EAAGJ,SAASc,MACV,SAACF,GAAI,OACHA,EAAKxP,OAASoP,EAAS7kB,OACvB6kB,EAAS7kB,QAAU4kB,EAAc,GAAG5kB,KAAK,GAC5C,IAEFge,KAAI,SAACyG,GAAE,OAAAtN,EAAAA,EAAA,GACHsN,GAAE,IACLJ,SAAUI,EAAGJ,SAASlF,QACpB,SAAC8F,GAAI,OACHA,EAAKxP,OAASoP,EAAS7kB,QACf,OAAR6kB,QAAQ,IAARA,OAAQ,EAARA,EAAU7kB,SAAU4kB,EAAc,GAAG5kB,KAAK,KAC7C,GACA,GACX,CAAC2kB,EAAaE,IAGhB,OAAQC,GACN,KAAKM,EAAAA,EACH,OAAOla,EAAAA,cAACma,EAAAA,QAAY,CAACb,gBAAiBU,IACxC,KAAKI,EAAAA,EACH,OAAOpa,EAAAA,cAACqa,EAAAA,QAAW,CAAClB,SAAUU,IAChC,QACE,OAAO,KAEb,gECpCA,QAfmB,SAAH5a,GAAA,IAAM8T,EAAK9T,EAAL8T,MAAOqG,EAAOna,EAAPma,QAAO,OAClCpZ,EAAAA,cAAA,KAAGM,KAAM8Y,EAAQkB,UACfta,EAAAA,cAAA,OAAKS,UAAS,OAAArD,OAAmB,IAAV2V,EAAc,QAAU,KAC7C/S,EAAAA,cAAA,QAAMS,UAAU,gBAAgB2Y,EAAQ9f,KAAK,KAC7C0G,EAAAA,cAAA,QAAMS,UAAU,UACb2Y,EAAQmB,iBAAiB,OAAK,IAC9BnB,EAAQmB,iBAAmB,EAAI,WAAa,WAE/Cva,EAAAA,cAAA,OAAKS,UAAU,0CACbT,EAAAA,cAAA,KAAGS,UAAU,uCAGf,2ECHN,QARoB,SAAHxB,GAAA,IAAMka,EAAQla,EAARka,SAAQ,OAC7BnZ,EAAAA,cAAA,OAAKS,UAAU,4BACZ0Y,EAASrG,KAAI,SAACsG,EAASrG,GAAK,OAC3B/S,EAAAA,cAACwa,EAAAA,QAAU,CAACzH,MAAOA,EAAOxU,IAAK6a,EAAQjY,GAAIiY,QAASA,GAAW,IAE7D,sFC0DR,QA9DgB,SAAHna,GAQN,IAPLwb,EAAaxb,EAAbwb,cACAC,EAAgBzb,EAAhByb,iBACAhB,EAAaza,EAAbya,cACAiB,EAAW1b,EAAX0b,YACAlB,EAAWxa,EAAXwa,YACAG,EAAQ3a,EAAR2a,SACAgB,EAAW3b,EAAX2b,YAEA,GAAInB,EACF,OAAO,KAeT,OACEzZ,EAAAA,cAAA,OAAKmB,GAAG,UACNnB,EAAAA,cAAA,OAAKS,UAAU,4BACbT,EAAAA,cAAA,OAAKS,UAAU,qBACbT,EAAAA,cAAA,YAAM,aACNA,EAAAA,cAAA,UACES,UAAS,sBAAArD,OACPwc,IAAaQ,EAAAA,EAAU,yBAA2B,IAEpDtZ,QAjBmB,WAC3B6Z,EAAYP,EAAAA,EACd,EAgBUnkB,KAAK,UAEL+J,EAAAA,cAAA,QAAMS,UAAU,YAAW,gBAE7BT,EAAAA,cAAA,UACES,UAAS,sBAAArD,OACPwc,IAAaM,EAAAA,EAAW,yBAA2B,IAErDpZ,QA9BoB,WAC5B6Z,EAAYT,EAAAA,EACd,EA6BUjkB,KAAK,UAEL+J,EAAAA,cAAA,QAAMS,UAAU,YAAYma,KAGhC5a,EAAAA,cAACgB,EAAAA,QAAM,CACL6F,cAAY,EACZ1F,GAAG,0BACH7H,KAAK,0BACL8C,QAASsd,EACTlY,SAjCe,SAAC0H,GACtBwR,EAAiBxR,EACnB,EAgCQpU,MAAO2lB,EAAc3lB,SAK/B,6jECqBA,QA7EiB,SAAAwe,GACf,SAAAuH,EAAY9e,GAAQ,IAADwX,EAKf,mGALeC,CAAA,KAAAqH,IACjBtH,EAAAE,EAAA,KAAAoH,EAAA,CAAM9e,KAOR+e,kBAAoB,WAId,IAHJlB,EAAQla,UAAAxG,OAAA,QAAA8M,IAAAtG,UAAA,GAAAA,UAAA,GAAG6T,EAAKS,MAAM4F,SACtBD,EAAQja,UAAAxG,OAAA,QAAA8M,IAAAtG,UAAA,GAAAA,UAAA,GAAG6T,EAAKS,MAAM2F,SACtBoB,IAAarb,UAAAxG,OAAA,QAAA8M,IAAAtG,UAAA,KAAAA,UAAA,GAEPsb,EAAM,IAAIC,IAAI/d,OAAOmD,UACvBuZ,GACFoB,EAAIE,aAAaC,IAAI,WAAYvB,GAE/BD,GACFqB,EAAIE,aAAaC,IAAI,WAAYxB,EAAS7kB,OAExCimB,GACF7d,OAAOke,QAAQC,UAAU,CAAC,EAAG,GAAIL,EAAIhgB,WAEzC,EAACuY,EAEDoH,YAAc,SAAC7lB,GAAiC,IAA1BimB,IAAarb,UAAAxG,OAAA,QAAA8M,IAAAtG,UAAA,KAAAA,UAAA,GACjC6T,EAAKO,SAAS,CAAE8F,SAAU9kB,IAAS,kBACjCye,EAAKuH,kBAAkBhmB,OAAOkR,EAAW+U,EAAc,GAE3D,EAACxH,EAEDmH,iBAAmB,SAACxR,GAAkC,IAA1B6R,IAAarb,UAAAxG,OAAA,QAAA8M,IAAAtG,UAAA,KAAAA,UAAA,GACvC6T,EAAKO,SAAS,CAAE6F,SAAUzQ,IAAU,kBAClCqK,EAAKuH,uBAAkB9U,EAAWkD,EAAQ6R,EAAc,GAE5D,EAACxH,EAED+H,iBAAmB/H,EAAKxX,MAAM2d,cAAc5G,KAAI,SAAC5J,GAAM,OAAA+C,EAAAA,EAAA,GAClD/C,GAAM,IACTpU,MAAOoU,EAAOpU,MAAMyP,eAAa,IArCjCgP,EAAKS,MAAQ,CACX4F,SAAUQ,EAAAA,EACVT,SAAUpG,EAAKxX,MAAM2d,cAAc,IACnCnG,CACJ,CAAC,4RAAAa,CAAAyG,EAAAvH,KAAAuH,KAAA,EAAAtc,IAAA,SAAAzJ,MAoCD,WAAU,IAADymB,EACP,OACEvb,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAACwb,EAAAA,QAAe,CACdC,WAAYjH,KAAKzY,MAAM0f,WACvBvF,UAAW1B,KAAKzY,MAAMma,YAExBlW,EAAAA,cAAC0b,EAAAA,QAAO,CACNd,YAAapG,KAAKzY,MAAM6e,YACxBF,iBAAkBlG,KAAKkG,iBACvBD,cAAejG,KAAKR,MAAM2F,SAC1BD,cAAelF,KAAK8G,iBACpBX,YAAanG,KAAKmG,YAClBf,SAA6B,QAArB2B,EAAE/G,KAAKR,MAAM4F,gBAAQ,IAAA2B,OAAA,EAAnBA,EAAqBhX,cAC/BkV,YAAajF,KAAKzY,MAAM0d,cAE1BzZ,EAAAA,cAAC2b,EAAAA,QAAO,CACNlC,YAAajF,KAAKzY,MAAM0d,YACxBC,cAAelF,KAAKzY,MAAM2d,cAC1BC,SAAUnF,KAAKR,MAAM2F,SACrBL,gBAAiB9E,KAAKzY,MAAMud,gBAC5BM,SAAUpF,KAAKR,MAAM4F,SACrBT,SAAU3E,KAAKzY,MAAMod,WAEvBnZ,EAAAA,cAAC4b,EAAAA,QAAmB,CAClBlC,cAAelF,KAAKzY,MAAM2d,cAC1BiB,YAAanG,KAAKmG,YAClBkB,YAAarH,KAAKkG,mBAI1B,+FAAC,CA1Ec,CAAS1a,EAAAA,yECE1B,QARwB,SAAHf,GAAA,IAAMwc,EAAUxc,EAAVwc,WAAYvF,EAASjX,EAATiX,UAAS,OAC9ClW,EAAAA,cAAA,KAAGS,UAAU,uBAAsB,yDACsBgb,EAAW,WAAS,IAC3Ezb,EAAAA,cAAA,UAAKkW,GAAgB,mFAEnB,+FCsCN,QAxC4B,SAAHjX,GAAqD,IAA/Cya,EAAaza,EAAbya,cAAeiB,EAAW1b,EAAX0b,YAAakB,EAAW5c,EAAX4c,YACnDC,EAAqB,SAACC,GAAc,OACxCrC,EAAc1S,MAAK,SAACkC,GAAM,OAAKA,EAAOpU,QAAUinB,CAAc,GAAE,EAE5DC,EAAkB,SAAChY,GAAO,IAADiY,EAAAC,EACvBC,EAAiD,QAApCF,EAAGxU,IAAAA,cAAsB,mBAAW,IAAAwU,OAAA,EAAjCA,EAAmC1X,cACnD6X,EAAiD,QAApCF,EAAGzU,IAAAA,cAAsB,mBAAW,IAAAyU,OAAA,EAAjCA,EAAmC3X,cAEpD4X,GAAkBC,IACrBzB,EAAYP,EAAAA,GAAS,GACrByB,EAAYnC,EAAc,IAAI,IAE5ByC,GACFxB,EAAYwB,GAAe,GAGzBL,EAAmBM,IACrBP,EAAYC,EAAmBM,IAAgB,EAEnD,EAkBA,OAhBAze,EAAAA,EAAAA,YAAU,WAER,OADAT,OAAOO,iBAAiB,WAAYue,GAC7B,kBAAM9e,OAAOQ,oBAAoB,WAAYse,EAAiB,CACvE,GAAG,KAEHre,EAAAA,EAAAA,YAAU,WAAO,IAAD0e,EAAAC,EACRH,EAAiD,QAApCE,EAAG5U,IAAAA,cAAsB,mBAAW,IAAA4U,OAAA,EAAjCA,EAAmC9X,cACnD6X,EAAiD,QAApCE,EAAG7U,IAAAA,cAAsB,mBAAW,IAAA6U,OAAA,EAAjCA,EAAmC/X,cACrD4X,KAAmBjC,EAAAA,GAAYE,EAAAA,IACjCO,EAAYwB,GAEVC,GAAiBN,EAAmBM,IACtCP,EAAYC,EAAmBM,GAEnC,GAAG,IAEIpc,EAAAA,cAAAA,EAAAA,SAAA,KACT,yGCtCMkC,EAAY,CAChBqa,MAAOpa,IAAAA,QAAkBA,IAAAA,MAAgBqa,EAAAA,mBAGrCC,EAAO,SAAHxd,GAAmB,IAAbsd,EAAKtd,EAALsd,MACd,OACEvc,EAAAA,cAAA,OAAKS,UAAU,sBACZ8b,EAAMzJ,KAAI,SAAC4J,GAAU,IAADC,EACnB,OACE3c,EAAAA,cAAA,OAAKzB,IAAKme,EAAKpY,MAAO7D,UAAU,mBAChB,QAAbkc,EAAAD,EAAKxQ,gBAAQ,IAAAyQ,OAAA,EAAbA,EAAezjB,QAAS,EACvB8G,EAAAA,cAAC4c,EAAAA,QAAeF,GAEhB1c,EAAAA,cAAC6c,EAAAA,QAAQ,CAACvY,MAAOoY,EAAKpY,MAAO0W,IAAK0B,EAAK1B,MAI/C,IAGN,EAEAyB,EAAKva,UAAYA,EAEjB,8GC1Ba4a,EAAe,CAC1BxY,MAAOnC,IAAAA,OAAiBC,WACxB4Y,IAAK7Y,IAAAA,OAAiBC,YAGlBya,EAAW,SAAH5d,GAAwB,IAAlBqF,EAAKrF,EAALqF,MAAO0W,EAAG/b,EAAH+b,IACzB,OACEhb,EAAAA,cAAA,KACES,UAAU,sBACVH,KAAM0a,EACN,iBAAe,yBACf,sBAAqB1W,GAEpBA,EAGP,EAEAuY,EAAS3a,UAAY4a,EAErB,uoCClBO,IAAMN,EAAkB,CAC7BO,iBAAkB5a,IAAAA,KAClB+J,SAAU/J,IAAAA,QAAkBA,IAAAA,MAAgB2a,EAAAA,eAC5Clc,UAAWuB,IAAAA,OACX6a,QAAS7a,IAAAA,OACTmC,MAAOnC,IAAAA,OAAiBC,YAUpBwa,EAAa,SAAH3d,GAMT,IALL8d,EAAgB9d,EAAhB8d,iBACA7Q,EAAQjN,EAARiN,SACA8Q,EAAO/d,EAAP+d,QACApc,EAAS3B,EAAT2B,UACA0D,EAAKrF,EAALqF,MAEkE7H,EAAA/B,GAA1BgC,EAAAA,EAAAA,UAASqgB,GAAiB,GAA3DE,EAAYxgB,EAAA,GAAEygB,EAAezgB,EAAA,GAE9B0gB,EAAe,WACnBD,GAAgB,SAACE,GAAI,OAAMA,CAAI,GACjC,EAEA,OACEpd,EAAAA,cAAA,OAAKS,UAAU,mBACbT,EAAAA,cAAA,OACES,UAAU,uBACVK,QAASqc,EACTE,WAAYF,EACZ9L,KAAK,OACLC,SAAU,GAET1Q,EACCZ,EAAAA,cAACsd,EAAAA,QAAI,CAAChkB,KAAMsH,EAAW2c,KAAK,KAAK9c,UAAU,yBAE3CT,EAAAA,cAAA,OAAK2R,IAAKqL,EAASnL,IAAKvN,EAAO7D,UAAU,6BAE3CT,EAAAA,cAAA,YAAOsE,GACPtE,EAAAA,cAACsd,EAAAA,QAAI,CAAChkB,KAAM2jB,EAAe,KAAO,OAAQM,KAAK,QAEjDvd,EAAAA,cAAA,OAAKS,UAAU,4BACZwc,GACC/Q,EAAS4G,KAAI,SAAC0K,GACZ,OACExd,EAAAA,cAAC6c,EAAAA,QAAQ,CAACte,IAAKif,EAAMlZ,MAAOA,MAAOkZ,EAAMlZ,MAAO0W,IAAKwC,EAAMxC,KAE/D,KAIV,EAEA4B,EAAW1a,UAAYsa,EACvBI,EAAWva,aAlDU,CACnB0a,kBAAkB,EAClB7Q,SAAU,GACV8Q,QAAS,GACTpc,UAAW,IAgDb,mFCPA,QAvDqB,SAAH3B,GAKX,IAJLwe,EAAYxe,EAAZwe,aACAC,EAASze,EAATye,UACAC,EAAW1e,EAAX0e,YACAC,EAAY3e,EAAZ2e,aAOMC,EAAyB,WAC7B,IAAMC,EAASlgB,SAASiK,cAAc,iBAChCqI,EAAUtS,SAASiK,cAAc,uBACvC,CAAC,YAAa,aAAa3Q,SAAQ,SAAC6mB,GAClCD,EAAOE,UAAU1N,OAAOyN,GACxB7N,EAAQ8N,UAAU1N,OAAOyN,EAC3B,GACF,EAEME,EAAyB,WAC7B,IAAMH,EAASlgB,SAASiK,cAAc,iBAChCqI,EAAUtS,SAASiK,cAAc,uBACvC,CAAC,YAAa,aAAa3Q,SAAQ,SAAC6mB,GAClCD,EAAOE,UAAU1N,OAAOyN,GACxB7N,EAAQ8N,UAAU1N,OAAOyN,EAC3B,IAEsBngB,SAASsgB,iBAC7B,+CAGYhnB,SAAQ,SAACinB,GACrBA,EAAOH,UAAU1N,OAAO,SAC1B,GACF,EAEA,OAAOmN,EACLzd,EAAAA,cAAA,OAAKS,UAAU,4BACbT,EAAAA,cAACoe,EAAAA,QAAU,CACTV,UAAWA,EACXC,YAAaA,EACbC,aAAcA,EACdS,SArCe,WACnBR,IACAI,GACF,KAsCEje,EAAAA,cAAA,OACE,cAAY,OACZS,UAAU,uBACVK,QAASmd,GAGf,4kDCOA,QA1DyB,SAAA3K,GAAA,SAAAgL,IAAA,mGAAA9K,CAAA,KAAA8K,GAAA7K,EAAA,KAAA6K,EAAA5e,UAAA,6RAAA0U,CAAAkK,EAAAhL,KAAAgL,KAAA,EAAA/f,IAAA,sBAAAzJ,MACvB,SAAoB4nB,GAClB,IAAQvb,EAAOub,EAAPvb,GACA1F,EAAUihB,EAAVjhB,MAEF8iB,EADiB7B,EAAf8B,YAC4B/iB,EAAQ,KAAO,IAAMA,EACjDgjB,EAAa/B,EAAb+B,SACAC,EAAmBhC,EAAnBgC,eACAC,EAAkBjC,EAAlBiC,cAEFC,EAAQ,GAAAxhB,OAAMyhB,EAAAA,EAAUC,UAAS,oBAAA1hB,OAAmBqhB,EAAQ,MAC5DM,EAAa3W,EAAEwW,GACfI,EAAWD,EAAWE,QAAQJ,EAAAA,EAAUK,SAE9C,GAAIzX,IAAAA,YAAsBuX,EAASG,SAAS,cAAe,CACzD,IAAMC,EAAShX,EAAE2W,EAAW/X,KAAK6X,EAAAA,EAAUQ,kBACrCC,EAAgBlX,EACpB2W,EAAW/X,KAAK6X,EAAAA,EAAUU,0BAEtBC,EAAiBpX,EAAE2W,EAAW/X,KAAK6X,EAAAA,EAAUY,sBAC7CC,EAAWtX,EAAEyW,EAAAA,EAAUc,cACvBC,EAAiBxX,EAAEyW,EAAAA,EAAUgB,qBAEnCT,EAAOU,KAAKrkB,GACZ+Y,KAAKuL,2BAA2B5e,EAAIue,GACpCE,EAAeE,KAAKvB,GACpBiB,EAAerP,KAAKwO,GACpBW,EAAcnP,KAAKuO,EACrB,CACF,GAAC,CAAAngB,IAAA,WAAAzJ,MAED,SAASoU,GACPsL,KAAKwL,oBAAoB9W,EAC3B,GAAC,CAAA3K,IAAA,6BAAAzJ,MAED,SAA2BmrB,EAAaC,GACtC9X,EAAE+X,KAAK,CACLnF,IAAI,2BAAD5d,OAA6B6iB,GAChChqB,KAAM,MACNmqB,SAAU,OACVC,QAAO,SAACjc,GACN8b,EAAG/P,KAAK/L,EAAK8L,QACf,GAEJ,GAAC,CAAA3R,IAAA,SAAAzJ,MAED,WAAU,IAADye,EAAA,KACP,OACEvT,EAAAA,cAACgB,EAAAA,QAAMuC,EAAA,GACDiR,KAAKzY,MAAK,CACdoF,GAAG,+BACHI,YAAY,yBACZC,SAAU,SAAC1M,GAAK,OAAKye,EAAK/R,SAAS1M,EAAM,IAG/C,+FAAC,CAvDsB,CAASkL,EAAAA,+FCQlC,QATuB,SAACjE,GACtB,IAAMmU,EAAUlQ,EAAAA,cAAC2I,EAAAA,QAA4B5M,GACvCkU,EAAYrS,SAASiK,cACzB,0CAGF,OAAOyY,EAAAA,aAAsBpQ,EAASD,EACxC,gECEA,QAXmB,SAAHhR,GAA2B,IAArBshB,EAAathB,EAAbshB,cACpB,OACEvgB,EAAAA,cAAA,OAAKS,UAAU,+CACbT,EAAAA,cAAA,KACEsX,wBAAyB,CAAEC,OAAQgJ,GACnC9f,UAAU,0BAIlB,gWCJA,SAAS+f,EAAgBvhB,GAQrB,IAPFwhB,EAAYxhB,EAAZwhB,aACAC,EAAUzhB,EAAVyhB,WACAC,EAAgB1hB,EAAhB0hB,iBACA3M,EAAK/U,EAAL+U,MACA4M,EAAiB3hB,EAAjB2hB,kBACAC,EAAU5hB,EAAV4hB,WACAC,EAAI7hB,EAAJ6hB,KAEMC,EAAaJ,GAAoB3M,IAAUgN,EAAAA,mBAAmBC,SAE9DC,EAAuB,SAAC/W,IAExB0W,GAAe1W,EAAM5L,MACT,UAAd4L,EAAM5L,KACQ,MAAd4L,EAAM5L,KAENqiB,EAAkBH,EAEtB,EAEMU,GACHnN,IAAUgN,EAAAA,mBAAmBC,UAC5BjN,IAAUgN,EAAAA,mBAAmBI,UAC9BT,EAEGU,EACJrN,IAAUgN,EAAAA,mBAAmBI,OACzB,yBACA,2BAYN,OACEphB,EAAAA,cAAA,MAAAuD,EAAA,CACE9C,UAAW6gB,IAAW,qBAAsBtN,EAAO,CACjDD,SAAUgN,IAEZ,iBAAgBM,EAChB,wBAfErN,IAAUgN,EAAAA,mBAAmBC,SACxB,OAELJ,EACK,OAEF,OAUL,oCAAAzjB,OAAmCqjB,GACnC3f,QAASogB,EACT7D,WAAY6D,EACZ7P,KAAK,SACLC,SAAU6P,EAAc,OAAInb,GACvB6a,EACD,CAAE,cAAe,QAAS,cAAe,0BACzC,CAAC,GAEL7gB,EAAAA,cAACuhB,EAAAA,QAAoB,CAACd,aAAcA,EAAczM,MAAOA,IACzDhU,EAAAA,cAAA,OAAKS,UAAU,0BACbT,EAAAA,cAAA,QACES,UAAU,gBACV6W,wBAAyB,CAAEC,OAAQmJ,KAErC1gB,EAAAA,cAACwhB,EAAAA,QAAY,CAACV,KAAMA,EAAM9M,MAAOA,KAIzC,CAEA,IAAM9R,EAAY,CAChB4e,KAAM3e,IAAAA,OACNse,aAActe,IAAAA,OAAiBC,WAC/Bse,WAAYve,IAAAA,OAAiBC,WAC7B4R,MAAO7R,IAAAA,MAAgB3N,OAAOuC,OAAOiqB,EAAAA,qBAAqB5e,WAC1Dwe,kBAAmBze,IAAAA,KACnBwe,iBAAkBxe,IAAAA,KAClB0e,WAAY1e,IAAAA,KAAeC,YAGvBC,EAAe,CACnBye,UAAM9a,EACN4a,kBAAmB,WAAO,EAC1BD,kBAAkB,GAGpBH,EAAiBte,UAAYA,EAC7Bse,EAAiBne,aAAeA,EAEhC,8FClDA,QAzBA,SAA6BpD,GAA2B,IAAxBwhB,EAAYxhB,EAAZwhB,aAAczM,EAAK/U,EAAL+U,MACtCyN,EAjBS,SAACzN,GAChB,OAAQA,GACN,KAAKgN,EAAAA,mBAAmBU,QACxB,KAAKV,EAAAA,mBAAmBW,QACtB,MAAO,eACT,KAAKX,EAAAA,mBAAmBY,UACtB,MAAO,WACT,KAAKZ,EAAAA,mBAAmBI,OACtB,MAAO,iBACT,KAAKJ,EAAAA,mBAAmBa,SACxB,KAAKb,EAAAA,mBAAmBC,SACxB,QACE,MAAO,GAEb,CAGea,CAAS9N,GACtB,OAAQA,GACN,KAAKgN,EAAAA,mBAAmBC,SACxB,KAAKD,EAAAA,mBAAmBa,SACtB,OAAO7hB,EAAAA,cAAA,OAAKS,UAAU,wBAAwBggB,GAChD,KAAKO,EAAAA,mBAAmBW,QACxB,KAAKX,EAAAA,mBAAmBY,UACxB,KAAKZ,EAAAA,mBAAmBU,QACtB,OACE1hB,EAAAA,cAAA,OAAKS,UAAU,wBACbT,EAAAA,cAACsd,EAAAA,QAAI,CAAChkB,KAAMmoB,EAAMlE,KAAK,QAG7B,KAAKyD,EAAAA,mBAAmBI,OACtB,OACEphB,EAAAA,cAAA,OAAKS,UAAU,wBACbT,EAAAA,cAACsd,EAAAA,QAAI,CAAChkB,KAAMmoB,EAAMlE,KAAK,QAG7B,QACE,OAAO,KAEb,ymCCtCA,IAAMrb,EAAY,CAChB6f,cAAe5f,IAAAA,QACbA,IAAAA,MAAgB,CACdse,aAActe,IAAAA,OAAiBC,WAC/Bse,WAAYve,IAAAA,OAAiBC,WAC7B0e,KAAM3e,IAAAA,OACN6R,MAAO7R,IAAAA,MAAgB3N,OAAOuC,OAAOiqB,EAAAA,wBAEvC5e,WACFnG,OAAQkG,IAAAA,KAAeC,WACvB4f,eAAgB7f,IAAAA,KAAeC,WAC/B6f,WAAY9f,IAAAA,OAAiBC,WAC7B8f,cAAe/f,IAAAA,OAAiBC,WAChC+f,aAAchgB,IAAAA,OAAiBC,WAC/BggB,cAAejgB,IAAAA,OAAiBC,WAChCye,WAAY1e,IAAAA,KAAeC,YAG7B,SAASigB,EAAQpjB,GASb,IARF8iB,EAAa9iB,EAAb8iB,cACA9lB,EAAMgD,EAANhD,OACA4kB,EAAU5hB,EAAV4hB,WACAmB,EAAc/iB,EAAd+iB,eACAC,EAAUhjB,EAAVgjB,WACAC,EAAajjB,EAAbijB,cACAC,EAAYljB,EAAZkjB,aACAC,EAAanjB,EAAbmjB,cAEsD3lB,EAAA/B,GAAVgC,EAAAA,EAAAA,YAAU,GAA/C4lB,EAAc7lB,EAAA,GAAEmkB,EAAiBnkB,EAAA,GAElC8lB,EAAqB,SAAC9B,GACrBxkB,GACH2kB,EAAkBH,GAGpBuB,EAAevB,EACjB,EAEA,OACEzgB,EAAAA,cAAA,OAAKS,UAAU,YAAY,wBAAArD,OAAuB6kB,IAChDjiB,EAAAA,cAAA,OAAKS,UAAU,iBACbT,EAAAA,cAAA,MACES,UAAU,UACV6W,wBAAyB,CAAEC,OAAQ4K,KAErCniB,EAAAA,cAAA,WACEA,EAAAA,cAAA,QAAMS,UAAU,kBACbyhB,EAAc,OAAKE,KAI1BpiB,EAAAA,cAAA,OAAKS,UAAU,kBACZshB,EAAcjP,KAAI,SAAC0P,GAClB,OACExiB,EAAAA,cAAA,OAAKzB,IAAKikB,EAAa/B,aAAchgB,UAAU,iBAC7CT,EAAAA,cAACwgB,EAAAA,QAAgB,CACfK,WAAYA,EACZJ,aAAc+B,EAAa/B,aAC3BC,WAAY8B,EAAa9B,WACzBC,iBAAkB2B,IAAmBE,EAAa/B,aAClDG,kBAAmB2B,EACnBvO,MAAO/X,EAAS+kB,EAAAA,mBAAmBI,OAASoB,EAAaxO,QAIjE,KAIR,CAEAqO,EAASngB,UAAYA,EAErB,qoCCvEA,IAAMA,EAAY,CAChBugB,UAAWtgB,IAAAA,MAAgB3N,OAAOuC,OAAO2rB,EAAAA,qBAAqBtgB,WAC9D2f,cAAe5f,IAAAA,QACbA,IAAAA,MAAgB,CACd2e,KAAM3e,IAAAA,OACNse,aAActe,IAAAA,OACdue,WAAYve,IAAAA,OAAiBC,WAC7B4R,MAAO7R,IAAAA,MAAgB3N,OAAOuC,OAAOiqB,EAAAA,qBAAqB5e,cAE5DA,WACF6f,WAAY9f,IAAAA,OAAiBC,WAC7B8f,cAAe/f,IAAAA,OAAiBC,WAChC+f,aAAchgB,IAAAA,OAAiBC,YAIjC,SAASugB,EAAc1jB,GAMnB,IALFwjB,EAASxjB,EAATwjB,UACAV,EAAa9iB,EAAb8iB,cACAE,EAAUhjB,EAAVgjB,WACAC,EAAajjB,EAAbijB,cACAC,EAAYljB,EAAZkjB,aAE0D1lB,EAAA/B,GAAdgC,EAAAA,EAAAA,WAAS,GAAK,GAAnDkmB,EAAcnmB,EAAA,GAAEomB,EAAiBpmB,EAAA,GAMxC,OACEuD,EAAAA,cAAA,OACES,UAAS,oBAAArD,OAAsBqlB,GAC/B,8BAAArlB,OAA6B6kB,IAG7BjiB,EAAAA,cAAA,OACEc,QAXe,WACnB+hB,GAAmBD,EACrB,EAUMniB,UAAS,UAAArD,OACPwlB,EAAiB,WAAa,YAAW,KAAAxlB,OACvCqlB,IAEJziB,EAAAA,cAAA,MAAIS,UAAU,sBACZT,EAAAA,cAAA,QAAMS,UAAU,kBAAkByhB,EAAc,MAChDliB,EAAAA,cAAA,QAAMsX,wBAAyB,CAAEC,OAAQ4K,MAE3CniB,EAAAA,cAAA,OAAKS,UAAU,kBACbT,EAAAA,cAACsd,EAAAA,QAAI,CAACC,KAAK,KAAKjkB,KAAMspB,EAAiB,KAAO,cAGjDA,GACC5iB,EAAAA,cAAA,OAAKS,UAAS,oBAAArD,OAAsBqlB,IAClCziB,EAAAA,cAAC8iB,EAAAA,QAAkB,CAACL,UAAWA,IAC/BziB,EAAAA,cAAA,OAAKS,UAAU,kBACZshB,EAAcjP,KAAI,SAAC0P,GAClB,OACExiB,EAAAA,cAAA,OAAKzB,IAAKikB,EAAa/B,aAAchgB,UAAU,iBAC7CT,EAAAA,cAACwgB,EAAAA,QAAgB,CACfM,KAAM0B,EAAa1B,KACnBH,kBAAkB,EAClBF,aAAc+B,EAAa/B,aAC3BC,WAAY8B,EAAa9B,WACzB1M,MAAOwO,EAAaxO,QAI5B,MAMZ,CAEA2O,EAAezgB,UAAYA,EAC3BygB,EAAetgB,aA3DM,CAAC,EA6DtB,kFCrDA,QA3BA,SAA2BpD,GACzB,OADqCA,EAATwjB,WAE1B,KAAKC,EAAAA,mBAAmBf,QACtB,OACE3hB,EAAAA,cAAA,KAAGS,UAAU,eAAc,iFAI/B,KAAKiiB,EAAAA,mBAAmBd,UACtB,OACE5hB,EAAAA,cAAA,KAAGS,UAAU,eAAc,4FAK/B,KAAKiiB,EAAAA,mBAAmBhB,QACtB,OACE1hB,EAAAA,cAAA,KAAGS,UAAU,eAAc,yFAK/B,QACE,OAAO,KAEb,2ECPA,QAlBA,SAAqBxB,GAAmB,IAAhB+U,EAAK/U,EAAL+U,MAAO8M,EAAI7hB,EAAJ6hB,KAC7B,OAAQ9M,GACN,KAAKgN,EAAAA,mBAAmBU,QACxB,KAAKV,EAAAA,mBAAmBW,QACtB,OACE3hB,EAAAA,cAAA,KAAGM,KAAMwgB,EAAMrgB,UAAU,wCAAuC,UAIpE,KAAKugB,EAAAA,mBAAmBY,UACxB,KAAKZ,EAAAA,mBAAmBI,OACxB,KAAKJ,EAAAA,mBAAmBa,SACxB,KAAKb,EAAAA,mBAAmBC,SACxB,QACE,OAAO,KAEb,mHCTM/e,EAAY,CAChB6gB,aAAc5gB,IAAAA,OAAiBC,WAC/BnG,OAAQkG,IAAAA,KAAeC,WACvB4gB,kBAAmB7gB,IAAAA,OACnB8gB,uBAAwB9gB,IAAAA,OACxB+gB,eAAgB/gB,IAAAA,MAAgB,CAC9BghB,QAAShhB,IAAAA,OACTihB,UAAWjhB,IAAAA,OACXkhB,QAASlhB,IAAAA,OACTmhB,eAAgBnhB,IAAAA,OAChBohB,WAAYphB,IAAAA,OACZqhB,cAAerhB,IAAAA,QACbA,IAAAA,MAAgB,CACd4f,cAAe5f,IAAAA,QACbA,IAAAA,MAAgB,CACdse,aAActe,IAAAA,MAAgBshB,EAAAA,uBAAuBrhB,WACrDse,WAAYve,IAAAA,OAAiBC,WAC7B0e,KAAM3e,IAAAA,OACN6R,MAAO7R,IAAAA,MAAgB3N,OAAOuC,OAAOiqB,EAAAA,qBAClC5e,cAGPqgB,UAAWtgB,IAAAA,MAAgB3N,OAAOuC,OAAO2rB,EAAAA,qBACzCgB,iBAAkBvhB,IAAAA,MAAgBshB,EAAAA,uBAClCtiB,GAAIgB,IAAAA,OAAiBC,WACrBzG,SAAUwG,IAAAA,YAGbC,YAQL,SAASuhB,EAAU1kB,GAKf,IAJF8jB,EAAY9jB,EAAZ8jB,aACAG,EAAcjkB,EAAdikB,eACAjnB,EAAMgD,EAANhD,OACA+mB,EAAiB/jB,EAAjB+jB,kBAEQQ,EAAkBN,EAAlBM,cAEFI,EAAe,WAGjB1mB,OAAOmD,SAASC,KAFdrE,EAEqB+mB,EAEH,GAAA5lB,OAAMF,OAAOmD,SAASwjB,SAAQ,YAEtD,EAEMxC,EAAiBplB,EACnB,yBACA,2BACE6nB,EAAkB7nB,EAAS,OAAS,OAE1C,OACE+D,EAAAA,cAAA,WACEA,EAAAA,cAAA,OAAKS,UAAU,iCACbT,EAAAA,cAAC+jB,EAAAA,QAAY,CACXhB,aAAcA,EACdI,QAASD,EAAeC,QACxBC,UAAWF,EAAeE,UAC1BnnB,OAAQA,EACR+nB,cAAeJ,EACfX,uBAAwBC,EAAeD,uBACvCM,WAAYL,EAAeK,WAC3BF,QAASH,EAAeG,WAG5BrjB,EAAAA,cAAA,MAAIS,UAAU,iCAAgC,gBAC9CT,EAAAA,cAAA,OAAKS,UAAU,kBACZ+iB,EAAc1Q,KAAI,SAACmR,EAAclR,GAChC,OACE/S,EAAAA,cAAC2iB,EAAAA,QAAc,CACbpkB,IAAK0lB,EAAa9iB,GAClB4gB,cAAekC,EAAalC,cAC5BU,UAAWwB,EAAaxB,UACxBR,WAAYgC,EAAa9iB,GACzB+gB,cAAenP,EAAQ,EACvBoP,aAAc8B,EAAatoB,UAGjC,KAEFqE,EAAAA,cAAA,OAAKS,UAAU,gCACbT,EAAAA,cAAA,UACES,UAAU,iCACV,iBAAgB4gB,EAChB,wBAAuByC,EACvB,YAAU,mBACVhjB,QAAS8iB,EACT3tB,KAAK,UAEJgG,GAAU+D,EAAAA,cAAA,KAAGS,UAAU,2CAA4C,gBAM9E,CAEAkjB,EAAWzhB,UAAYA,EACvByhB,EAAWthB,aA1EU,CACnB2gB,kBAAmB,KACnBC,uBAAwB,MA0E1B,0xDC/GA,IAAM/gB,EAAY,CAChB6gB,aAAc5gB,IAAAA,OAAiBC,WAC/B8hB,0BAA2B/hB,IAAAA,MAAgB,CACzCghB,QAAShhB,IAAAA,OACTihB,UAAWjhB,IAAAA,OACXkhB,QAASlhB,IAAAA,OACTmhB,eAAgBnhB,IAAAA,OAChBohB,WAAYphB,IAAAA,SAEdlG,OAAQkG,IAAAA,KAAeC,WACvB4gB,kBAAmB7gB,IAAAA,OACnBqhB,cAAerhB,IAAAA,QACbA,IAAAA,MAAgB,CACd4f,cAAe5f,IAAAA,QACbA,IAAAA,MAAgB,CACdse,aAActe,IAAAA,OAAiBC,WAC/Bse,WAAYve,IAAAA,OAAiBC,WAC7B4R,MAAO7R,IAAAA,MAAgB,CACrB6e,EAAAA,mBAAmBC,SACnBD,EAAAA,mBAAmBI,YAIzBjgB,GAAIgB,IAAAA,OAAiBC,WACrBzG,SAAUwG,IAAAA,OAAiBC,cAE7BA,WACF+hB,UAAWhiB,IAAAA,OAAiBC,WAC5BgiB,cAAejiB,IAAAA,OAAiBC,WAChCye,WAAY1e,IAAAA,KAAeC,YAQ7B,SAASiiB,EAAcplB,GASnB,IARF8jB,EAAY9jB,EAAZ8jB,aACAmB,EAAyBjlB,EAAzBilB,0BACAjoB,EAAMgD,EAANhD,OACA+mB,EAAiB/jB,EAAjB+jB,kBACAQ,EAAavkB,EAAbukB,cACAW,EAASllB,EAATklB,UACAtD,EAAU5hB,EAAV4hB,WACAuD,EAAanlB,EAAbmlB,cAEiD3nB,EAAA/B,GAAfgC,EAAAA,EAAAA,WAAS,GAAM,GAA1CoK,EAASrK,EAAA,GAAE6nB,EAAY7nB,EAAA,GACxB8nB,EAA2Bf,EAAcrN,QAC7C,SAACqO,EAAKC,GAAG,OAAKjwB,OAAOkwB,OAAOF,EAAGxZ,EAAA,GAAKyZ,EAAItjB,GAAK,MAAO,GACpD,CAAC,GAIFtE,EAAAnC,GAF6DgC,EAAAA,EAAAA,UAC5D6nB,GACD,GAFMI,EAAuB9nB,EAAA,GAAE+nB,EAA0B/nB,EAAA,GAIpDgoB,EAAoB,WACxB3nB,OAAOmD,SAASC,KAAO0iB,CACzB,EAuDM3B,EAAiBplB,EACnB,yBACA,2BAYJ,OACE+D,EAAAA,cAAA,WACEA,EAAAA,cAAA,OAAKS,UAAU,4CACZsiB,EAAe,EAAC,sBAAA3lB,OACSgB,IACpB,OACA2kB,GACA,GACD,oBAAA3lB,OACC8mB,EAA0BZ,eAAc,oFAAAlmB,OAEhB+mB,EAAS,gEAEzCnkB,EAAAA,cAAA,OAAKS,UAAU,kBACZ+iB,EAAc1Q,KAAI,SAACmR,EAAclR,GAChC,OACE/S,EAAAA,cAACqiB,EAAAA,QAAQ,CACPL,eAAgB,SAACvB,GAAY,OAzCd,SAACqE,EAAc7C,GACxC,GAAIhmB,EACF4oB,QADF,CAIA,IAAME,EAAoBJ,EAC1BI,EAAkB9C,GAAc6C,EAChCF,EAA2BG,EAH3B,CAIF,CAkCcxC,CAAmB9B,EAAcwD,EAAa9iB,GAAG,EAEnD5C,IAAK0lB,EAAa9iB,GAClB4gB,cAAekC,EAAalC,cAC5B9lB,OAAQA,EACR4kB,WAAYA,EACZoB,WAAYgC,EAAa9iB,GACzB+gB,cAAenP,EAAQ,EACvBoP,aAAc8B,EAAatoB,SAC3BymB,cAAeoB,EAActqB,QAGnC,KAEF8G,EAAAA,cAAA,OAAKS,UAAU,gCACbT,EAAAA,cAAA,SAAAuD,EAAA,CACE9C,UAAU,iCACV,iBAAgB4gB,EAChB,wBA7CDplB,EAGD4kB,EACK,OAEF,OALE,OA6CH,YAAU,mBACVjf,SAAUkF,EACVhG,QAAS+f,EAAa,KA1GT,WACnB,GAAI5kB,EAEF4oB,QAFF,CAMA,IAAMG,EAAQpnB,SAASiK,cAAc,2BAA2BqI,QAC1D+U,EAAa/nB,OAAOmD,SAASC,KAAK4kB,MAAM,KAAK,GAC7CC,EAAU,CACdvtB,OAAQ,OACRwtB,QAAS,CACP,eAAgBJ,EAChB,eAAgB,oBAElBnnB,KAAMoP,KAAKC,UAAU,CACnBmY,gBAAiB,CACfC,qCAAsC9wB,OAAOqF,KAC3C8qB,GACA7R,KAAI,SAACvU,GACL,MAAO,CACLgnB,iBAAkBhnB,EAClBinB,cAAeb,EAAwBpmB,GAE3C,QAKN+lB,GAAa,GAEbje,MAAM+d,EAAee,GAClB3tB,MAAK,SAACiuB,GACLvoB,OAAOmD,SAASC,KAAO2kB,CACzB,IAAE,OACK,SAACxe,GAENC,QAAQD,MAAM,wBAAyBA,GACvC6d,GAAa,GACboB,MAAM,wBACR,GAnCF,CAoCF,EAkEQzvB,KAAK,UACA4qB,EACD,CACE,cAAe,QACf,cAAe,0BAEjB,CAAC,GAEJ5kB,GAAU+D,EAAAA,cAAA,KAAGS,UAAU,2CAA4C,WAM9E,CAEA4jB,EAAeniB,UAAYA,EAC3BmiB,EAAehiB,aAxJM,CACnB6hB,0BAA2B,KAC3BlB,kBAAmB,MAwJrB,2FC7LM9gB,EAAY,CAChB6gB,aAAc5gB,IAAAA,OACdghB,QAAShhB,IAAAA,OAAiBC,WAC1BghB,UAAWjhB,IAAAA,OAAiBC,WAC5BnG,OAAQkG,IAAAA,KACR6hB,cAAe7hB,IAAAA,KACf8gB,uBAAwB9gB,IAAAA,OACxBohB,WAAYphB,IAAAA,OAAiBC,WAC7BihB,QAASlhB,IAAAA,OAAiBC,YAU5B,SAASujB,EAAO1mB,GAAoB,IAAjBqF,EAAKrF,EAALqF,MAAO4Q,EAAKjW,EAALiW,MAClBzU,EAAY6D,EAAMC,cACxB,OACEvE,EAAAA,cAAA,OAAKS,UAAU,uBACbT,EAAAA,cAAA,OAAKS,UAAS,8BAAArD,OAAgCqD,IAAcyU,GAC5DlV,EAAAA,cAAA,YAAOsE,GAGb,CAEe,SAASyf,EAAYxV,GAShC,IARFwU,EAAYxU,EAAZwU,aAAY6C,EAAArX,EACZ4U,QAAAA,OAAO,IAAAyC,EAAG,EAACA,EAAAC,EAAAtX,EACX6U,UAAAA,OAAS,IAAAyC,EAAG,EAACA,EACb5pB,EAAMsS,EAANtS,OACA+nB,EAAazV,EAAbyV,cACAf,EAAsB1U,EAAtB0U,uBACAM,EAAUhV,EAAVgV,WAAUuC,EAAAvX,EACV8U,QAAAA,OAAO,IAAAyC,EAAG,EAACA,EAELC,EAAQ5C,EAAUC,EAAYC,EAC9BC,EAAkBH,EAAU4C,EAAS,IACrCC,EAAoBC,KAAKC,MAAM5C,IAAmB,EAClD6C,EACJpD,EAAe,EAAC,WAAA3lB,OACD6lB,EAAsB,mCAAA7lB,OACtB+lB,EAAO,QAAA/lB,OAAO2oB,EAAK,aAE9B1E,EAAiBplB,EACnB,yBACA,2BACE6nB,EAAkB7nB,EAAS,OAAS,OAE1C,OACE+D,EAAAA,cAAA,OAAKS,UAAU,0BAA0B,YAAU,oBACjDT,EAAAA,cAAA,OAAKS,UAAU,8BACbT,EAAAA,cAAA,OAAKS,UAAU,iCACbT,EAAAA,cAAA,QAAMS,UAAU,qCACbulB,EAAkB,MAGvBhmB,EAAAA,cAAA,OAAKS,UAAU,sCACbT,EAAAA,cAAC2lB,EAAO,CAACzQ,MAAOiO,EAAS7e,MAAM,YAC/BtE,EAAAA,cAAC2lB,EAAO,CAACzQ,MAAOkO,EAAW9e,MAAM,cAChC+e,EAAU,GAAKrjB,EAAAA,cAAC2lB,EAAO,CAACzQ,MAAOmO,EAAS/e,MAAM,cAGnDtE,EAAAA,cAAA,OAAKS,UAAU,+BACbT,EAAAA,cAAA,WACGmmB,EAAY,eAAa,IAC1BnmB,EAAAA,cAAA,KAAGM,KAAMijB,GAAY,iCAAsC,qDAG7DvjB,EAAAA,cAAA,WACEA,EAAAA,cAAA,UACES,UAAU,yDACV,iBAAgB4gB,EAChB,wBAAuByC,EACvBhjB,QAASkjB,EACT7iB,GAAG,qBACHlL,KAAK,UAEJgG,GAAU+D,EAAAA,cAAA,KAAGS,UAAU,2CACxBT,EAAAA,cAAA,YAAM,kBAMlB,CAEA+jB,EAAa1hB,aA9EQ,CACnB0gB,aAAc,EACd9mB,QAAQ,EACR+nB,cAAe,WAAO,EACtBf,uBAAwB,MA2E1Bc,EAAa7hB,UAAYA,iIC7FlB,IAAM8e,EAAqB,CAChCC,SAAU,WACVG,OAAQ,SACRO,QAAS,UACTC,UAAW,YACXF,QAAS,UACTG,SAAU,YAGCa,EAAqB,CAChCf,QAAS,UACTC,UAAW,YACXF,QAAS,WAGE7b,EAAY,CACvBC,MAAO,QACPC,MAAO,QACPE,SAAU,YAGCwd,EAAwB,CAAC,IAAK,IAAK,IAAK,yFCHrD,QAdmC,WACjC,OACEzjB,EAAAA,cAAComB,EAAAA,QAAyB,CACxBC,UAAU,kBACVC,WAAYC,EAAAA,kBACZ9lB,UAAU,oCACVU,GAAG,oCACHqlB,MAAO,IACPltB,KAAK,oCACLmC,MAAM,aAGZ,sFCEA,QAdgC,WAC9B,OACEuE,EAAAA,cAAComB,EAAAA,QAAyB,CACxBC,UAAU,eACVC,WAAYG,EAAAA,cACZhmB,UAAU,iCACVU,GAAG,iCACHqlB,MAAO,IACPltB,KAAK,iCACLmC,MAAM,UAGZ,0ECCA,QAdqC,SAAHwD,GAAuB,IAAjBynB,EAASznB,EAATynB,UACtC,OACE1mB,EAAAA,cAAComB,EAAAA,QAAyB,CACxBC,UAAU,oBACVC,WAAYI,EACZjmB,UAAU,sCACVU,GAAG,sCACHqlB,MAAO,IACPltB,KAAK,sCACLmC,MAAM,eAGZ,sFCGA,QAdyB,WACvB,OACEuE,EAAAA,cAAComB,EAAAA,QAAyB,CACxBC,UAAU,QACVC,WAAYK,EAAAA,QACZlmB,UAAU,yBACVU,GAAG,yBACHqlB,MAAO,IACPltB,KAAK,yBACLmC,MAAM,SAGZ,sFCDA,QAXiC,WAC/B,OACEuE,EAAAA,cAAC4mB,EAAAA,QAAc,CACbP,UAAU,aACVC,WAAYO,EAAAA,QACZL,MAAO,IACP/qB,MAAM,eAGZ,sFCEA,QAX4B,WAC1B,OACEuE,EAAAA,cAAC8mB,EAAAA,QAA0B,CACzBT,UAAU,WACVC,WAAYS,EAAAA,QACZP,MAAO,GACP/qB,MAAM,iBAGZ,qFCGA,QAZuC,WACrC,OACEuE,EAAAA,cAAC4mB,EAAAA,QAAc,CACbP,UAAU,mBACVC,WAAYU,EAAAA,QACZR,MAAO,IACPS,gBAAiB,EACjBxrB,MAAM,qBAGZ,qFCEA,QAZqC,WACnC,OACEuE,EAAAA,cAAC4mB,EAAAA,QAAc,CACbP,UAAU,iBACVC,WAAYY,EAAAA,QACZV,MAAO,IACPS,gBAAiB,EACjBxrB,MAAM,mBAGZ,sFCEA,QAZiC,WAC/B,OACEuE,EAAAA,cAAC4mB,EAAAA,QAAc,CACbP,UAAU,aACVC,WAAYa,EAAAA,QACZX,MAAO,IACPS,gBAAiB,EACjBxrB,MAAM,8BAGZ,qFCCA,QAXuC,WACrC,OACEuE,EAAAA,cAAC8mB,EAAAA,QAA0B,CACzBT,UAAU,OACVC,WAAYc,EAAAA,QACZZ,MAAO,GACP/qB,MAAM,wBAGZ,ylCCFA,IAAM4rB,EAAU,CACd,wBAAyB,qBACzB,oBAAqB,qBACrB,qBAAsB,sBACtB,wBAAyB,yBACzB,mBAAoB,oBACpB,qBAAsB,qBACtB,iCAAkC,iCAClC,oBAAqB,oBACrB,mBAAoB,sBACpB,yBAA0B,+BAC1B,8BAA+B,wBAC/B,uBAAwB,wBACxB,wBAAyB,yBACzB,+BAAgC,gCAChC,uBAAwB,uBACxB,8BAA+B,uBAC/B,uBAAwB,uBACxB,uBAAwB,sBACxB,sBAAuB,gBACvB,oBAAqB,mBACrB,wBAAyB,eACzB,4BAA6B,mBAC7B,iBAAkB,gBAClB,4CAA6C,0BAC7C,+BAAgC,cAChC,sCAAuC,sBACvC,8BAA+B,YAC/B,2BAA4B,SAC5B,gDACE,8BACF,6BAA8B,UAC9B,uDACE,oCACF,gDACE,iCACF,gDAAiD,6BACjD,8BAA+B,WAC/B,2BAA4B,0BAC5B,iDACE,oCACF,gCAAiC,iBACjC,wBAAyB,SACzB,0BAA2B,WAC3B,iDACE,kCACF,wBAAyB,QACzB,0BAA2B,WAC3B,+BAAgC,gBAChC,8BAA+B,eAC/B,wBAAyB,uBACzB,oBAAqB,oBAIjBC,EAAwB,SAACvrB,GAC7B,OAEEiE,EAAAA,cAAA,OACES,UAAU,kCACVK,QAAS,WAAF,OAAQ/E,EAAMwrB,OAAOxrB,EAAMjH,MAAM,GAEvCiH,EAAM+jB,KACP9f,EAAAA,cAAA,KAAGS,UAAU,qCAGnB,EAEM+mB,EAAW,SAACljB,EAAOoY,GACvB,MAAuB,mBAAnBA,EAAK2J,UACD,GAANjpB,OAAUkH,EAAM4gB,MAAM,MAAM,GAAE,OAET,eAAnBxI,EAAK2J,UACO,qBAAV/hB,EAAqCA,EAClCmjB,EAAAA,EAAOC,YAAYpjB,GAExB,CAAC,WAAY,QAAQqjB,QAAQjL,EAAK2J,YAAc,EAC3CoB,EAAAA,EAAOG,SAASP,EAAQ/iB,IAAU,YAAa,IAGjDmjB,EAAAA,EAAOG,SAAStjB,EAAO,GAChC,EAMMujB,EAAe,WACnBzf,EAAE,wBAAwB0f,MACxB1f,EAAE,wBAAwB2f,SAASC,aANT,GAQ9B,EAmJA,SAAeC,EAAAA,EAAAA,IAjJY,SAAClsB,GAE1B,IAA+CU,EAAA/B,GAAfgC,EAAAA,EAAAA,WAAS,GAAM,GAAxCwrB,EAAQzrB,EAAA,GAAE0rB,EAAW1rB,EAAA,GAGsBI,EAAAnC,GAAdgC,EAAAA,EAAAA,WAAS,GAAK,GAA3Cuc,EAAUpc,EAAA,GAAEurB,EAAavrB,EAAA,GAG6B+H,EAAAlK,GAAXgC,EAAAA,EAAAA,UAAS,GAAE,GAAtD2rB,EAAiBzjB,EAAA,GAAE0jB,EAAoB1jB,EAAA,GAExC2jB,GAAejhB,EAAAA,EAAAA,QAAO,MACtBkhB,GAAUlhB,EAAAA,EAAAA,QAAO,OAEvB3J,EAAAA,EAAAA,YAAU,WAKR,OAJAT,OAAOO,iBAAiB,SAAUoqB,GAElCA,IAEO,WACL3qB,OAAOQ,oBAAoB,SAAUmqB,EACvC,CACF,GAAG,KAEHlqB,EAAAA,EAAAA,YAAU,WAGR,OAFAT,OAAOO,iBAAiB,SAAUgrB,EAAc,CAAEC,SAAS,IAEpD,WACLxrB,OAAOQ,oBAAoB,SAAU+qB,EACvC,CACF,GAAG,CAACP,KAGJvqB,EAAAA,EAAAA,YAAU,WACRyqB,GAAc,EAChB,GAAG,CAACrsB,EAAMwgB,SAGV5e,EAAAA,EAAAA,YAAU,WACR,IAAKsb,EAAY,CACf,IAI4C0P,EAJxCzT,EAAQ,EAERlN,GAAO,EACX4gB,koBAAAC,CACoBL,EAAQ7gB,QAAQuE,UAAQ,IAA5C,IAAA0c,EAAAryB,MAAAoyB,EAAAC,EAAAl0B,KAAAiD,MAA8C,CAAC,IAApC6lB,EAAKmL,EAAA7zB,MACVkT,EAAM,EACRA,EAAMwV,EAAMsL,wBAAwB9gB,IAC3BwV,EAAMsL,wBAAwB9gB,IAAMA,IAC7CkN,GAAS,EAEb,CAAC,OAAA6T,GAAAH,EAAAv0B,EAAA00B,EAAA,SAAAH,EAAAtyB,GAAA,CAEDgyB,EAAqBpT,EACvB,CACF,GAAG,CAAC+D,IAGJ,IAAMwP,EAAe,WACfF,EAAa5gB,SAEbwgB,EADED,EACU9f,EAAE,sBAAsB,GAAG0gB,wBAAwB9gB,IAAM,EAEzDugB,EAAa5gB,QAAQmhB,wBAAwB9gB,KAAO,GAIpEogB,GAAc,EAChB,EAMMY,EAAgB,GAItBjtB,EAAMwgB,MAAMrlB,SAAQ,SAACwlB,GACnB,IAAIpY,EAEAoY,EAAKH,MACPG,EAAKH,MAAMrlB,SAAQ,SAAC+xB,GAClB3kB,EAAQkjB,EAASyB,EAAW3kB,MAAOoY,GACnCsM,EAAcnwB,KAAK,CAAEinB,KAAK,GAAD1iB,OAAKkH,GAASxP,MAAOm0B,EAAWn0B,OAC3D,IACS6F,MAAMC,QAAQ8hB,EAAKwM,mBAC5BxM,EAAKwM,kBAAkBhyB,SAAQ,SAAC+xB,GAC9B3kB,EAAQkjB,EAASyB,EAAW3kB,MAAOoY,GACnCsM,EAAcnwB,KAAK,CAAEinB,KAAMxb,EAAOxP,MAAO4nB,EAAK5nB,OAChD,KAEAwP,EAAQkjB,EAAS9K,EAAKpY,MAAOoY,GAC7BsM,EAAcnwB,KAAK,CAAEinB,KAAMxb,EAAOxP,MAAO4nB,EAAK5nB,QAElD,IAGA,IAAIq0B,EAAqB,sBACI,IAAzBH,EAAc9vB,OAChBiwB,GAAsB,8BACbjB,IACTiB,GAAsB,gCAGxB,IAAIC,EAAgB,4BAOpB,OAN6B,IAAzBJ,EAAc9vB,OAChBkwB,GAAiB,oCACPnQ,IACVmQ,GAAiB,sCAIjBppB,EAAAA,cAAA,OAAKS,UAAW0oB,EAAoB9gB,IAAKkgB,GACtCS,EAAc9vB,OAAS,GACtB8G,EAAAA,cAAA,OAAKS,UAAU,+BAA8B,oBAE/CT,EAAAA,cAAA,OAAKS,UAAU,uCACbT,EAAAA,cAAA,OAAKS,UAAW2oB,EAAe/gB,IAAKmgB,GACjCQ,EAAclW,KAAI,SAAC4J,GAClB,OACE1c,EAAAA,cAACsnB,EAAqB,CACpB/oB,IAAKme,EAAKoD,KAAOpD,EAAKpY,MACtBijB,OAAQxrB,EAAMwrB,OACdzH,KAAMpD,EAAKoD,KACXhrB,MAAO4nB,EAAK5nB,OAGlB,KAEDuzB,EAAoB,IAAMpP,GACzBjZ,EAAAA,cAAA,OAAKS,UAAU,+BACbT,EAAAA,cAAA,UACES,UAAU,sBACVK,QAhEO,WACjBsnB,GAAc,EAChB,EA+DYnyB,KAAK,UAEL+J,EAAAA,cAAA,QAAMS,UAAU,aAAW,KAAArD,OAAOirB,EAAiB,UACnDroB,EAAAA,cAAA,QAAMS,UAAU,wBAAsB,KAAArD,OAAOirB,OAO3D,sHC5OMnmB,EAAY,CAChBmkB,UAAWlkB,IAAAA,OAAiBC,WAC5Bqc,SAAUtc,IAAAA,OAAiBC,WAC3BinB,OAAQlnB,IAAAA,KACRmnB,WAAYnnB,IAAAA,KAAeC,WAC3BmnB,gBAAiBpnB,IAAAA,KAAeC,WAChCmlB,OAAQplB,IAAAA,KAAeC,YAOnBonB,EAAS,SAACztB,GACd,IAAMuqB,EACJmD,EAAAA,QAAgBA,EAAAA,QAAgBC,iBAAiB3tB,EAAM0iB,WACrDhe,EAAY,0BACZ1E,EAAMstB,SAAQ5oB,GAAa,WAE/B,IAAIhF,EAAQM,EAAM0iB,SAKlB,MAJI,CAAC,YAAa,eAAgB,YAAYkJ,QAAQlsB,IAAU,IAC9DA,EAAK,GAAA2B,OAAM3B,EAAK,MAIhBuE,EAAAA,cAAA,OAAKS,UAAWA,EAAWwQ,aAAclV,EAAMwtB,iBAC7CvpB,EAAAA,cAAA,OAAKS,UAAU,kCACbT,EAAAA,cAACW,EAAAA,QAAU,CACTE,SAAS,kBACTD,UAAU,gCACVE,QAAS/E,EAAMutB,WACfxJ,KAAK,gBAEP9f,EAAAA,cAAA,UAAKjE,EAAM0iB,WAEbze,EAAAA,cAAC4mB,EAAAA,eAAc,CACbP,UAAWtqB,EAAMsqB,UACjBC,WAAYA,EACZqD,YAAU,EACVT,kBAAmBntB,EAAMmtB,kBACzB3M,MAAOxgB,EAAMwgB,MACbgL,OAAQxrB,EAAMwrB,SAItB,EAEAiC,EAAOtnB,UAAYA,EACnBsnB,EAAOnnB,aAvCc,CACnBgnB,QAAQ,GAwCV,s+ECjDA,IAAMnnB,EAAY,CAChBmkB,UAAWlkB,IAAAA,OAAiBC,WAC5BkkB,WAAYnkB,IAAAA,QACVA,IAAAA,MAAgB,CACdmC,MAAOnC,IAAAA,OAAiBC,WACxBtN,MAAOqN,IAAAA,OAAiBC,aACvBA,YACHA,WACFma,MAAOpa,IAAAA,MACPolB,OAAQplB,IAAAA,KAAeC,WACvB3G,MAAO0G,IAAAA,OAAiBC,YAOpB0kB,EAA6B,SAAC/qB,GAElC,IAA8CU,EAAA/B,GAAdgC,EAAAA,EAAAA,UAAS,MAAK,GAAvCktB,EAAQntB,EAAA,GAAEotB,EAAWptB,EAAA,GAG4BI,EAAAnC,GAAZgC,EAAAA,EAAAA,UAAS,CAAC,GAAE,GAAjDotB,EAAajtB,EAAA,GAAEktB,EAAkBltB,EAAA,IAGxCc,EAAAA,EAAAA,YAAU,WAAO,IAADsB,EACdlD,EAAMwrB,QAAOtoB,EAAA,IAAG7B,OAAMuC,MAAAV,EAAA8M,EAAIvX,OAAOuC,OAAO+yB,KAC1C,GAAG,CAACA,IAEJ,IAAME,EAAe,SAACjzB,EAAQ0nB,GAC5BsL,GAAmB,SAACxV,GAAS,OAAAtI,EAAAA,EAAA,GAAWsI,GAAS,GAAAvJ,EAAA,GAAGyT,EAAW1nB,GAAM,GACvE,GAGA4G,EAAAA,EAAAA,YAAU,WASR,OARiB,OAAbisB,GACFhsB,SAASF,oBAAoB,QAASusB,GACtCrsB,SAASF,oBAAoB,WAAYusB,KAEzCrsB,SAASH,iBAAiB,QAASwsB,GACnCrsB,SAASH,iBAAiB,WAAYwsB,IAGjC,WACLrsB,SAASF,oBAAoB,QAASusB,GACtCrsB,SAASF,oBAAoB,WAAYusB,EAC3C,CACF,GAAG,CAACL,IAEJ,IAAMM,EAAe,SAACzL,GACH,OAAbA,EACFrW,EAAE,oBAAoB+hB,YAAY,gCAElC/hB,EAAE,oBAAoBgiB,SAAS,gCAGjCP,EAAYpL,EACd,EAGMwL,EAA6B,SAAC9f,IAClB/B,EAAE+B,EAAMpI,QAEbkd,QAAQ7W,EAAE,6BAA6BlP,QAChDkP,EAAE,4BAA4BgC,GAAG,aAEjC8f,EAAa,KAEjB,EAkBA,OACElqB,EAAAA,cAAA,OAAKS,UAAU,kBAAkBwQ,aAhBR,SAAC9G,GAEtBjN,OAAOmtB,YAAc9sB,EAAAA,KAIT6K,EAAE+B,EAAMpI,QAEbkd,QAAQ7W,EAAE,6BAA6BlP,QAChDkP,EAAE,4BAA4BgC,GAAG,aAEjC8f,EAAa,KAEjB,GAIIlqB,EAAAA,cAAA,OAAKS,UAAU,2BAA2B1E,EAAMN,OAChDuE,EAAAA,cAAA,MAAIS,UAAU,6DACX1E,EAAMuqB,WAAWxT,KAAI,SAAC2L,GACrB,IAAMlC,EACJxgB,EAAMwgB,MAAMtI,QACV,SAAClf,GAAC,OAAKA,EAAEuP,MAAM4gB,MAAM,OAAO,KAAOzG,EAAS3pB,KAAK,KAC9C,GACDw1B,EAAaV,IAAanL,EAAS3pB,MAEzC,OACEkL,EAAAA,cAACuqB,EAAAA,QAAiC,CAChClE,UAAWtqB,EAAMsqB,UACjB6C,kBAAmBntB,EAAMmtB,kBACzBsB,YAAaN,EACbF,aAAcA,EACdzN,MAAOA,EACPhe,IAAKkgB,EAAS3pB,MACdwP,MAAOma,EAASna,MAChBgmB,WAAYA,EACZx1B,MAAO2pB,EAAS3pB,OAGtB,KAIR,EAEAgyB,EAA2B5kB,UAAYA,EACvC4kB,EAA2BzkB,aAxGN,CACnBka,MAAO,IAyGT,SAAekO,EAAAA,EAAAA,GAAsB3D,qHCzH/B5kB,EAAY,CAChBmkB,UAAWlkB,IAAAA,OAAiBC,WAC5BooB,YAAaroB,IAAAA,KACb6nB,aAAc7nB,IAAAA,KAAeC,WAC7Bma,MAAOpa,IAAAA,MACPmC,MAAOnC,IAAAA,OAAiBC,WACxBkoB,WAAYnoB,IAAAA,KACZrN,MAAOqN,IAAAA,OAAiBC,YASpBmoB,EAAoC,SAACxuB,GAEzC,IAAI2uB,EAAe3uB,EAAMwgB,MAAMtI,QAAO,SAACyI,GAAI,OAAKA,EAAKiO,SAAS,IACxDC,EAAeF,EAAaxxB,OAEb,IAAjB0xB,IAAoBF,EAAe3uB,EAAMwgB,OAE7C,IAAMsO,EAAWH,EAAavU,QAC5B,SAAC2U,EAAaC,GAAU,OAAKD,EAAcC,EAAW7V,KAAK,GAC3D,GAEE8V,EACF,kEAEe,IAAbH,IAAgBG,GAAe,uCAC/BjvB,EAAMuuB,aAAYU,GAAe,qCAErC,IAAIC,EAAwB,iCAI5B,OAHIL,EAAe,IACjBK,GAAyB,4CAGzBjrB,EAAAA,cAAA,MAAIzB,IAAKxC,EAAMjH,MAAO2L,UAAWuqB,GAE/BhrB,EAAAA,cAAA,OACES,UAAU,wCACVuQ,aAAc,WACR9T,OAAOmtB,YAAc9sB,EAAAA,IAGzBxB,EAAMyuB,YAAYzuB,EAAMjH,MAC1B,EACAgM,QAAS,WACP/E,EAAMyuB,YAAYzuB,EAAMjH,MAC1B,EACAuc,KAAK,SACLC,SAAS,MAERvV,EAAMuI,MACPtE,EAAAA,cAAA,QAAMS,UAAU,uCACbmqB,EAAe,GACd5qB,EAAAA,cAAA,QAAMS,UAAU,gCACbmqB,EAAa,YAGlB5qB,EAAAA,cAAA,QAAMS,UAAWwqB,GACdC,EAAAA,EAAOC,oBAAoBN,IAE9B7qB,EAAAA,cAAA,KAAGS,UAAU,oEAIjBT,EAAAA,cAACwpB,EAAAA,QAAM,CACLnD,UAAWtqB,EAAMsqB,UACjB5H,SAAU1iB,EAAMjH,MAChBo0B,kBAAmBntB,EAAMmtB,kBACzBG,QAASttB,EAAMuuB,WACfhB,WAAY,WAAF,OAAQvtB,EAAMyuB,YAAY,KAAK,EACzCjB,gBAAiB,WACXrsB,OAAOmtB,YAAc9sB,EAAAA,IAIzBxB,EAAMyuB,YAAY,KACpB,EACAjO,MAAOxgB,EAAMwgB,MACbgL,OAAQxrB,EAAMiuB,eAItB,EAEAO,EAAkCroB,UAAYA,EAC9CqoB,EAAkCloB,aA/Eb,CACnBmoB,YAAa,WAAO,EACpBjO,MAAO,GACP+N,YAAY,GA8Ed,sGC9FMpoB,EAAY,CAChBkpB,IAAKjpB,IAAAA,MAAgB,CACnBsc,SAAUtc,IAAAA,OAAiBC,WAC3BipB,aAAclpB,IAAAA,OAAiBC,WAC/BkpB,eAAgBnpB,IAAAA,OAChBkV,KAAMlV,IAAAA,OAAiBC,WACvBmpB,MAAOppB,IAAAA,OAAiBC,WACxBopB,OAAQrpB,IAAAA,SACPC,WACHqpB,QAAStpB,IAAAA,MAOLupB,EAAM,SAAHzsB,GAA0B,IAApBmsB,EAAGnsB,EAAHmsB,IAAKK,EAAOxsB,EAAPwsB,QACZhwB,EAAQ2vB,EAAIE,eAAc,GAAAluB,OACzBguB,EAAIE,eAAc,OAAAluB,OAAMguB,EAAIC,cAC/BD,EAAIC,aACF5M,EAAW2M,EAAI3M,SAASyG,MAAM,OAAO,GAEvCyG,EAAW,WACXC,EAAa,YAAAxuB,OAAeqhB,EAC7Bla,cACAgI,QAAQ,IAAK,IACbA,QAAQ,QAAS,MAChBsf,EAAa,QACbC,EAAa,GACbC,EAAc,qBAEdC,GAAY,EAgBhB,OAdGP,GACD,CAAC,YAAa,eAAgB,eAAgB,YAAY9D,QACxDlJ,GACE,IAEJkN,GAAY,WACZC,GAAiB,WACjBC,GAAc,gBACdC,GAAc,gBACdC,GAAe,gBAEfC,GAAY,GAIZhsB,EAAAA,cAAA,OAAKS,UAAWkrB,GACbK,EACChsB,EAAAA,cAAA,WACEA,EAAAA,cAAA,QAAMS,UAAWmrB,GAAgBnN,GACjCze,EAAAA,cAAA,QAAMS,UAAWorB,GAAapwB,IAGhCuE,EAAAA,cAAA,WACEA,EAAAA,cAAA,KAAGS,UAAWmrB,EAAetrB,KAAM8qB,EAAI/T,MACpCoH,GAEHze,EAAAA,cAAA,KAAGS,UAAWorB,EAAYvrB,KAAM8qB,EAAI/T,MACjC5b,IAIO,aAAbgjB,GACCze,EAAAA,cAAA,OAAKS,UAAWsrB,GAAa,MAAIX,EAAII,QAEvCxrB,EAAAA,cAAA,OAAKS,UAAWqrB,GAAarE,EAAAA,EAAOwE,WAAWb,EAAIG,QAGzD,EAEAG,EAAIxpB,UAAYA,EAChBwpB,EAAIrpB,aA7DiB,CACnBopB,SAAS,GA8DX,kRClEMvpB,EAAY,CAChBgqB,cAAe/pB,IAAAA,OAAiBC,WAChC+pB,KAAMhqB,IAAAA,MACNspB,QAAStpB,IAAAA,KACTiqB,UAAWjqB,IAAAA,MAAgB,CACzBkqB,eAAgBlqB,IAAAA,OAChBmqB,WAAYnqB,IAAAA,OACZoqB,YAAapqB,IAAAA,OACbqqB,WAAYrqB,IAAAA,OACZsqB,UAAWtqB,IAAAA,OACXuqB,eAAgBvqB,IAAAA,SACfC,WACHgR,aAAcjR,IAAAA,MASVwqB,GAAWC,EAAAA,EAAAA,IAAoB,SAAA3tB,GAAwB,IAArB4tB,EAAa5tB,EAAb4tB,cACtC,OAAIA,GAAiBA,EAAcC,QAAU,GAAW,KAGtD9sB,EAAAA,cAAA,OAAKmB,GAAG,aAAaV,UAAU,iBAC7BT,EAAAA,cAAC+sB,EAAAA,EAAU,CAACC,UAAQ,IAG1B,IAEMC,GAAeL,EAAAA,EAAAA,IACnB,SAAAre,GAAgD,IAA7C6d,EAAS7d,EAAT6d,UAAWS,EAAate,EAAbse,cAAeK,EAAW3e,EAAX2e,YACrBC,GACHD,EAAYE,OAAS,IAAIl0B,OAAS,EAAC,cAAAkE,OAClB8vB,EAAYE,OAC1B,yBACAC,EAAaR,EAAcS,kBAAkB,GAAGlpB,KACtD,OACEpE,EAAAA,cAAA,WACEA,EAAAA,cAAA,WAAK,UACIA,EAAAA,cAAA,cAAQ,mBAAwB,qBAAmB,IAC1DA,EAAAA,cAAA,cAAQ,UAAe,yBAAsBA,EAAAA,cAAA,cAAQ,WAAiB,IAAI,2CAG5EA,EAAAA,cAAA,UACEA,EAAAA,cAAA,MAAIS,UAAU,SACZT,EAAAA,cAAA,iBAAA5C,OAAY8tB,EAAAA,EAAOC,oBACjBiB,EAAUI,YACX,YAAoB,IAAI,IACvBtB,EAAAA,EAAOC,oBAAoBkC,EAAW,sBAAwB,GAAI,IACnEF,EAAY,KAEfntB,EAAAA,cAAA,MAAIS,UAAU,UACZT,EAAAA,cAAA,iBAAA5C,OAAY8tB,EAAAA,EAAOC,oBACjBiB,EAAUG,aACX,aAAqB,IAAI,IACxBrB,EAAAA,EAAOC,oBAAoBkC,EAAW,uBAAyB,GAAI,IACpEF,EAAY,KAEfntB,EAAAA,cAAA,MAAIS,UAAU,aACZT,EAAAA,cAAA,iBAAA5C,OAAY8tB,EAAAA,EAAOC,oBACjBiB,EAAUC,gBACX,gBAAwB,IAAI,IAE5BnB,EAAAA,EAAOC,oBACNkC,EAAW,0BAA4B,GACtC,IACFF,EAAY,KAEfntB,EAAAA,cAAA,MAAIS,UAAU,UACZT,EAAAA,cAAA,iBAAA5C,OAAY8tB,EAAAA,EAAOC,oBACjBiB,EAAUE,YACX,YAAoB,IAAI,IACvBpB,EAAAA,EAAOC,oBAAoBkC,EAAW,uBAAyB,GAAI,IACpEF,EAAY,KAEfntB,EAAAA,cAAA,MAAIS,UAAU,WACZT,EAAAA,cAAA,iBAAA5C,OAAY8tB,EAAAA,EAAOC,oBACjBiB,EAAUK,WACX,aAAqB,IAAI,IAEzBvB,EAAAA,EAAOC,oBAAoBkC,EAAW,wBAA0B,GAAI,IACpEF,EAAY,KAEfntB,EAAAA,cAAA,MAAIS,UAAU,eACZT,EAAAA,cAAA,iBAAA5C,OAAY8tB,EAAAA,EAAOC,oBACjBiB,EAAUM,gBACX,sBAA8B,IAAI,IAElCxB,EAAAA,EAAOC,oBACNkC,EAAW,2BAA6B,GACvC,IACFF,EAAY,MAKvB,IAGF,SAASI,EAAKxxB,GACZ,GAA0B,IAAtBA,EAAMowB,KAAKjzB,OACb,OACE8G,EAAAA,cAACwtB,EAAAA,QAAS,CACRpa,aAAcrX,EAAMqX,aACpBqa,6BAA8B1xB,EAAM0xB,+BAM1C,IAAIC,GAAa,EACjB,OACE1tB,EAAAA,cAAA,OAAKmB,GAAG,QACLpF,EAAMowB,KAAKrZ,KAAI,SAACsY,GACf,OACGrvB,EAAM0vB,UACNiC,GACD,CAAC,YAAa,eAAgB,eAAgB,YAAY/F,QACxDyD,EAAI3M,SAASyG,MAAM,OAAO,IACxB,GAEJwI,GAAa,EAEX1tB,EAAAA,cAAA,OAAKzB,IAAK6sB,EAAIuC,SAAUltB,UAAU,0BAChCT,EAAAA,cAAA,OAAKS,UAAU,uBACbT,EAAAA,cAAC4tB,EAAAA,QAAK,CACJnlB,aAAa,8BACbnI,KAAMvE,EAAMmwB,cACZvV,QAASkX,EACTzY,WAAYrZ,EAAMqX,cAElBpT,EAAAA,cAACitB,EAAY,CAACb,UAAWrwB,EAAMqwB,cAGnCpsB,EAAAA,cAAC0rB,EAAAA,QAAG,CAACN,IAAKA,EAAKK,QAAS1vB,EAAM0vB,YAK7BzrB,EAAAA,cAAC0rB,EAAAA,QAAG,CAACntB,IAAK6sB,EAAIuC,SAAUvC,IAAKA,EAAKK,QAAS1vB,EAAM0vB,SAC1D,IACAzrB,EAAAA,cAAC2sB,EAAQ,MAGf,CAEAY,EAAKrrB,UAAYA,EACjBqrB,EAAKlrB,aAtIgB,CACnB8pB,KAAM,GACNV,SAAS,EACTrY,cAAc,GAqIhB,SAAe0a,EAAAA,EAAAA,GAAYP,m1CC5J3B,IAAMrrB,EAAY,CAChBmkB,UAAWlkB,IAAAA,OAAiBC,WAC5BkkB,WAAYnkB,IAAAA,QACVA,IAAAA,MAAgB,CACdmC,MAAOnC,IAAAA,OAAiBC,WACxBtN,MAAOqN,IAAAA,OAAiBC,aACvBA,YACHA,WACF3B,UAAW0B,IAAAA,OACX+mB,kBAAmB/mB,IAAAA,MACnBhB,GAAIgB,IAAAA,OAAiBC,WACrBma,MAAOpa,IAAAA,MACP7I,KAAM6I,IAAAA,OAAiBC,WACvBmlB,OAAQplB,IAAAA,KAAeC,WACvB3G,MAAO0G,IAAAA,OAIPspB,QAAStpB,IAAAA,KACT4rB,yBAA0B5rB,IAAAA,KAAeC,YAUrCgkB,EAA4B,SAACrqB,GACjC,IASMiyB,EAAmB,mBAAA5wB,OAAsBrB,EAAM0E,WAE/CwtB,EAAoBlyB,EAAMuqB,WAAWxT,KAAI,SAACob,GAC9C,IAAQhZ,GAAUnZ,EAAMwgB,MAAMvV,MAAK,SAACjS,GAAC,OAAKA,EAAEuP,QAAU4pB,EAAIp5B,KAAK,KAAK,CAClEogB,MAAO,IADDA,MAGR,OAAAjJ,EAAAA,EAAA,GAAYiiB,GAAG,IAAEC,WAAYjZ,GAC/B,IAEA,OACElV,EAAAA,cAAA,OAAKS,UAAWutB,GACbjyB,EAAMN,OAASuE,EAAAA,cAAA,WAAMjE,EAAMN,OAC5BuE,EAAAA,cAACouB,EAAAA,QAAW,CACVjtB,GAAIpF,EAAMoF,GACV0F,cAAY,EACZvN,KAAMyC,EAAMzC,KACZkI,SAzBe,SAAC6sB,GACftyB,EAAM0vB,QAKX1vB,EAAMwrB,QAAQ8G,GAAkB,IAAIvb,KAAI,SAAA7T,GAAQ,OAAAA,EAALnK,KAAiB,KAJ1DiH,EAAMgyB,yBAAyBO,EAAAA,QAAwBvyB,EAAMsqB,WAKjE,EAmBMjqB,QAAS6xB,EACTM,eAAgBxyB,EAAM0vB,QACtB32B,MAAOiH,EAAMmtB,oBAIrB,EAYA9C,EAA0BlkB,UAAYA,EACtCkkB,EAA0B/jB,aArDL,CACnB5B,UAAW,GACXgrB,SAAS,EACTlP,MAAO,GACP9gB,MAAO,MAmDT,SAAegvB,EAAAA,EAAAA,IAb8B,SAAC1uB,GAC5C,OACEiE,EAAAA,cAACwuB,EAAAA,QAAmBC,SAAQ,MACzB,SAACC,GAAuB,OACvB1uB,EAAAA,cAAComB,EAAyB7iB,EAAA,GAAKxH,EAAW2yB,GAA2B,GAI7E,mMC3EMxsB,EAAY,CAChBkR,aAAcjR,IAAAA,MAOVwsB,EAA0B,WAC9BvmB,EAAE,0BAA0BwmB,MAAM,OACpC,EAEA,SAASpB,EAAUzxB,GACjB,OACEiE,EAAAA,cAAA,OAAKS,UAAU,cACbT,EAAAA,cAAA,OAAKS,UAAU,qBAAoB,qBACnCT,EAAAA,cAAA,OAAKS,UAAU,gCAA+B,+BACf,IAC5B1E,EAAMqX,aAELpT,EAAAA,cAAA,KACEM,KAAK,IACL,iBAAe,8BACfQ,QAAS6tB,GACV,mBAKD3uB,EAAAA,cAAA,KACEM,KAAK,IACL,iBAAe,8BACf,cAAY,QACZ,cAAY,uBACb,mBAGA,IAAI,oBAGTN,EAAAA,cAAC6uB,EAAAA,QAAmB,CAClBC,QAASjB,EACTkB,eAAgBhzB,EAAM0xB,+BAI9B,CAEAD,EAAUtrB,UAAYA,EACtBsrB,EAAUnrB,aA7CW,CACnB+Q,cAAc,GA8ChB,iHClDMlR,EAAY,CAChBgT,MAAO/S,IAAAA,OACP6nB,aAAc7nB,IAAAA,KAAeC,WAC7BuoB,UAAWxoB,IAAAA,KACX6sB,MAAO7sB,IAAAA,KAAeC,WACtB6sB,WAAY9sB,IAAAA,KACZrN,MAAOqN,IAAAA,OAAiBC,YASpB8sB,EAAgB,SAACnzB,GACrB,IAAMqF,EAA6B,IAAhBrF,EAAMmZ,MAErBiU,EAAqB,iBAEzB,OADI/nB,IAAY+nB,GAAsB,6BAEpCnpB,EAAAA,cAAA,OAAKS,UAAW0oB,GACdnpB,EAAAA,cAAA,OAAKS,UAAU,wBACbT,EAAAA,cAACmvB,EAAAA,QAAkB,CACjBtb,QAAS9X,EAAM4uB,UACf/oB,SAAUR,EACV9H,KAAMyC,EAAMjH,MACZ0M,SAAU,SAACnN,GACJ0H,EAAMkzB,YACT56B,EAAEkb,iBAEJxT,EAAMiuB,aAAajuB,EAAMjH,MAC3B,GAECiH,EAAMizB,QAGXhvB,EAAAA,cAAA,QACES,UAAS,wBAAArD,OACPrB,EAAM4uB,UAAY,kCAAoC,KAGvDO,EAAAA,EAAOC,oBAAoBpvB,EAAMmZ,QAI1C,EAEAga,EAAchtB,UAAYA,EAC1BgtB,EAAc7sB,aAxCO,CACnB6S,MAAO,EACPyV,WAAW,EACXsE,YAAY,GAuCd,qvDC7CA,IAAM/sB,EAAY,CAChBmkB,UAAWlkB,IAAAA,OACXmkB,WAAYnkB,IAAAA,QACVA,IAAAA,MAAgB,CACdmC,MAAOnC,IAAAA,OAAiBC,WACxBtN,MAAOqN,IAAAA,OAAiBC,aACvBA,YAEL8mB,kBAAmB/mB,IAAAA,MACnBoa,MAAOpa,IAAAA,MACPolB,OAAQplB,IAAAA,KAAeC,WAGvB6kB,gBAAiB9kB,IAAAA,OACjB1G,MAAO0G,IAAAA,OAKPspB,QAAStpB,IAAAA,KACT4rB,yBAA0B5rB,IAAAA,KAAeC,YAarC4sB,EAAQ,SAAH/vB,GAA8B,IAAxBqF,EAAKrF,EAALqF,MACf,GAAkB,mBADarF,EAATonB,UACc,CAClC,IAAyC+I,EAAA10B,EAAhB4J,EAAM4gB,MAAM,KAAI,GAAlCmK,EAAMD,EAAA,GAAEE,EAAMF,EAAA,GACrB,OACEpvB,EAAAA,cAAAA,EAAAA,SAAA,KACGqvB,EACDrvB,EAAAA,cAAA,WAAM,IAAA5C,OACDkyB,GAGX,CAEA,OAAOhrB,CACT,EAEMirB,EAAe,SAAC9D,EAAS+D,GAAa,OAC1C/D,GACA,CACE,aACA,gBACA,gBACA,uBACA9D,QAAQ6H,IAAkB,CAAE,EAE1B5I,EAAiB,SAAC7qB,GAEtB,IAECU,EAAA/B,GAFmDgC,EAAAA,EAAAA,UAClDX,EAAMkrB,gBAAkB,GACzB,GAFMwI,EAAkBhzB,EAAA,GAAEizB,EAAqBjzB,EAAA,GAKUI,EAAAnC,GAAZgC,EAAAA,EAAAA,UAAS,IAAG,GAAnDizB,EAAe9yB,EAAA,GAAE+yB,EAAkB/yB,EAAA,GAIwB+H,EAAAlK,GAAZgC,EAAAA,EAAAA,UAAS,IAAG,GAA3DmzB,EAAmBjrB,EAAA,GAAEkrB,EAAsBlrB,EAAA,GAGME,EAAApK,GAAZgC,EAAAA,EAAAA,UAAS,IAAG,GAAjDqzB,EAAcjrB,EAAA,GAAEkrB,EAAiBlrB,EAAA,IAGxCnH,EAAAA,EAAAA,YAAU,WACJ5B,EAAMkrB,gBAAkB,GAAKwI,EAC/BG,EAAmB7zB,EAAMuqB,YAEzBsJ,EAAmB7zB,EAAMuqB,WAAWpsB,MAAM,EAAG6B,EAAMkrB,iBAEvD,GAAG,CAACwI,KAKJ9xB,EAAAA,EAAAA,YAAU,WAGmB,IAAvB5B,EAAMwgB,MAAMrjB,QAAmD,IAAnC6C,EAAMmtB,kBAAkBhwB,QACtD42B,EAAuB/zB,EAAMuqB,WAAWxT,KAAI,SAAAvE,GAAQ,OAAAA,EAALzZ,KAAiB,KAGlEk7B,EACEL,EAAgB7c,KAAI,SAAC2L,GACnB,IAAIwR,EAAc,EACdtF,GAAY,EAEhB,GAA0B,MAAtBlM,EAAS3pB,MAAM,GAAY,CAC7B,IAAMo7B,EAAuBn0B,EAAMwgB,MAAMtI,QACvC,SAAClf,GAAC,OAAKA,EAAEuP,MAAM4gB,MAAM,OAAO,KAAOzG,EAAS3pB,MAAMoF,MAAM,EAAE,IAG5D+1B,EAAcC,EAAqB/Z,QACjC,SAACqO,EAAK2L,GAAI,OAAK3L,EAAM2L,EAAKjb,KAAK,GAC/B,GAIAgb,EAAqBh3B,OAAS,GAC9Bg3B,EAAqBE,OAAM,SAACr7B,GAAC,OAAKA,EAAE41B,SAAS,MAE7CA,GAAY,EAEhB,KAAO,CACL,IAAM0F,EAASt0B,EAAMwgB,MAAMtI,QACzB,SAAClf,GAAC,OAAKA,EAAEuP,QAAUma,EAAS3pB,KAAK,IACjC,GACEu7B,IACFJ,EAAcI,EAAOnb,MACrByV,EAAY0F,EAAO1F,UAEvB,CAEIA,GAA6B,IAAhBsF,GAA2C,MAAtBxR,EAAS3pB,MAAM,IACnDg7B,GAAuB,SAACvb,GACtB,OAAO+b,IAAAA,KAAW,GAADlzB,OAAA2O,EAAKwI,GAAS,CAAEkK,EAAS3pB,QAC5C,IAGF,IAAMm6B,EAAaM,EAAaxzB,EAAM0vB,QAAShN,EAAS3pB,OAExD,OACEkL,EAAAA,cAACkvB,EAAAA,QAAa,CACZha,MAAO+a,EACP1xB,IAAKkgB,EAAS3pB,MACdk6B,MAAOhvB,EAAAA,cAACgvB,EAAK,CAAC1qB,MAAOma,EAASna,MAAO+hB,UAAWtqB,EAAMsqB,YACtD2D,aAAcA,EACdW,UAAWA,EACXsE,WAAYA,EACZn6B,MAAO2pB,EAAS3pB,OAGtB,IAEJ,GAAG,CAACmY,KAAKC,UAAUnR,EAAMwgB,OAAQoT,EAAgBz2B,UAGjDyE,EAAAA,EAAAA,YAAU,WAC2B,IAA/BkyB,EAAoB32B,SAGR,IADdo3B,IAAAA,aAAmBT,EAAqB9zB,EAAMmtB,mBAC3ChwB,QAKL6C,EAAMwrB,OACJ+I,IAAAA,QAAa3wB,MAAb2wB,IAAK,CAASv0B,EAAMmtB,mBAAiB9rB,OAAA2O,EAAK8jB,MAE5CC,EAAuB,KANrBA,EAAuB,IAO3B,GAAG,CAAC7iB,KAAKC,UAAU2iB,KAEnB,IAAM7F,EAAe,SAACl1B,GACpB,GAAKy6B,EAAaxzB,EAAM0vB,QAAS32B,GAOjC,GAAiB,MAAbA,EAAM,GAAY,CACpB,IAAMy7B,EAAgBx0B,EAAMuqB,WACzBrS,QAAO,SAAC5L,GAAG,OAAKA,EAAIvT,QAAUA,CAAK,IACnCge,KAAI,SAACzK,GAAG,OAAKA,EAAIvT,KAAK,IAErBy7B,EAAcH,OAAM,SAACI,GAAG,OAAKz0B,EAAMmtB,kBAAkBuH,SAASD,EAAI,IACpEz0B,EAAMwrB,OAAO+I,IAAAA,QAAa3wB,MAAb2wB,IAAK,CAASv0B,EAAMmtB,mBAAiB9rB,OAAA2O,EAAKwkB,MAIvDx0B,EAAMwrB,OACJ+I,IAAAA,KAAW,GAADlzB,OAAA2O,EAAKhQ,EAAMmtB,mBAAiBnd,EAAKwkB,KAGjD,MAAWx0B,EAAMmtB,kBAAkBvB,QAAQ7yB,GAAS,EAClDiH,EAAMwrB,OAAO,GAADnqB,OAAA2O,EAAKhQ,EAAMmtB,mBAAiB,CAAEp0B,KAE1CiH,EAAMwrB,OAAOxrB,EAAMmtB,kBAAkBjV,QAAO,SAAC9e,GAAC,OAAKA,IAAML,CAAK,UAvB9DiH,EAAMgyB,yBAAyBO,EAAAA,QAAwBvyB,EAAMsqB,WAyBjE,EAMA,OACErmB,EAAAA,cAAA,OAAKS,UAAU,mBACZ1E,EAAMN,OACLuE,EAAAA,cAAA,OAAKS,UAAU,2BAA2B1E,EAAMN,OAElDuE,EAAAA,cAAA,MAAIS,UAAU,yBAAyBsvB,GACtCh0B,EAAMkrB,gBAAkB,GACvBjnB,EAAAA,cAAA,OAAKS,UAAU,qCACbT,EAAAA,cAAA,UACES,UAAU,8CACVK,QAduB,WAC/B4uB,GAAsB,SAACgB,GAAgB,OAAMA,CAAgB,GAC/D,EAaUz6B,KAAK,UAEJw5B,EAAqB,SAAW,WAM7C,EAEA7I,EAAe1kB,UAAYA,EAC3B0kB,EAAevkB,aAlMM,CACnBgkB,UAAW,KACXC,WAAY,GACZ4C,kBAAmB,GACnBuC,SAAS,EACTlP,MAAO,GACP0K,iBAAkB,EAClBxrB,MAAO,MA6LT,IAAMk1B,EAAiC,SAAC50B,GACtC,OACEiE,EAAAA,cAACwuB,EAAAA,QAAmBC,SAAQ,MACzB,SAACC,GAAuB,OACvB1uB,EAAAA,cAAC4mB,EAAcrjB,EAAA,GAAKxH,EAAW2yB,GAA2B,GAIlE,EAMA,SAAejE,EAAAA,EAAAA,GAAsBkG,kDCpPrC,iBAAe3wB,cAAoB,CACjC4wB,sBAAuB,KACvBnF,SAAS,EACTsC,yBAA0B,WAAO,knFC2BnC,IAAM8C,GAAYC,EAAAA,EAAAA,IAAiB,SAAA7xB,GAAoC,IAAjCiqB,EAAiBjqB,EAAjBiqB,kBAAmB3B,EAAMtoB,EAANsoB,OAKvD,OACEvnB,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAAA,KAAGS,UAAU,6FACbT,EAAAA,cAAA,SACES,UAAU,uCACVe,SATN,SAAsB2I,GACpBod,EAAOpd,EAAM4mB,cAAcj8B,MAC7B,EAQMyM,YAAY,SACZtL,KAAK,SACLnB,MAAOo0B,IAIf,IAEMhnB,EAAY,CAChB8uB,aAAc7uB,IAAAA,OAAiBC,WAC/B6uB,cAAe9uB,IAAAA,OAAiBC,WAChC8pB,cAAe/pB,IAAAA,OAAiBC,WAChCqpB,QAAStpB,IAAAA,KACT+uB,kBAAmB/uB,IAAAA,MAAgB,CACjCukB,UAAWvkB,IAAAA,QACTA,IAAAA,MAAgB,CAAEmC,MAAOnC,IAAAA,OAAkBrN,MAAOqN,IAAAA,YAEnDC,WACHgrB,MAAOjrB,IAAAA,OACPiR,aAAcjR,IAAAA,KACdsrB,6BAA8BtrB,IAAAA,QAU1BgvB,GAAgBvE,EAAAA,EAAAA,IACpB,SAAAre,GAA8C,IAA3C6iB,EAAe7iB,EAAf6iB,gBAAiBr1B,EAAKwS,EAALxS,MAAOs1B,EAAW9iB,EAAX8iB,YAEzB,OAAID,EACK,2BAKPpxB,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAAA,OAAKS,UAAU,gDACbT,EAAAA,cAACsxB,EAAAA,EAAK,CACJC,aAAc,CACZC,MAAK,SAAC1E,GACJ,MAAM,GAAN1vB,OAAU8tB,EAAAA,EAAOC,oBAAoB2B,GAAO,WAC9C,KAGJ9sB,EAAAA,cAACW,EAAAA,QAAU,CACTE,SAAS,wCACTD,UAAU,6BACVE,QAASuwB,EACTvR,KAAK,YAGT9f,EAAAA,cAACyxB,EAAAA,QAAkB,MACnBzxB,EAAAA,cAAA,OAAKS,UAAU,wEACbT,EAAAA,cAACsxB,EAAAA,EAAK,CACJC,aAAc,CACZC,MAAK,SAAC1E,GACJ,MAAM,GAAN1vB,OAAU8tB,EAAAA,EAAOC,oBAAoB2B,GAAO,WAC9C,MAIN9sB,EAAAA,cAACutB,EAAAA,QAAI,CACHrB,cAAenwB,EAAMmwB,cACrBT,QAAS1vB,EAAM0vB,QACfW,UAAWrwB,EAAMqwB,UACjBhZ,aAAcrX,EAAMqX,aACpBqa,6BAA8B1xB,EAAM0xB,+BAI5C,IAGIiE,EAAS,SAAC31B,GACd,IAAiEU,EAAA/B,GAAfgC,EAAAA,EAAAA,WAAS,GAAM,GAA1Di1B,EAAiBl1B,EAAA,GAAEm1B,EAAoBn1B,EAAA,GAS5CI,EAAAnC,GAR4DgC,EAAAA,EAAAA,UAAS,CACrEk0B,sBAAuB,KACvBnF,QAAS1vB,EAAM0vB,QACfsC,yBAA0B,SAAC8D,GAAY,OACrCC,GAA2B,SAACvd,GAAS,OAAAtI,EAAAA,EAAA,GAChCsI,GAAS,IACZqc,sBAAuBiB,GAAY,GAClC,IACL,GARKE,EAAuBl1B,EAAA,GAAEi1B,EAA0Bj1B,EAAA,GAUpDm1B,EAAeC,IAAcl2B,EAAMi1B,aAAcj1B,EAAMk1B,eAY7D,SAASxX,IACPmY,GAAqB,GACrBxpB,EAAE,4BAA4B8pB,SAC9Bt0B,SAASF,oBAAoB,QAASy0B,GACtCv0B,SAASF,oBAAoB,WAAYy0B,EAC3C,CAEA,IAAMA,EAA6B,SAAChoB,GAClC,IAAMioB,EAAUhqB,EAAE+B,EAAMpI,QAKrBoI,EAAMpI,OAAOic,UAAUqU,SAAS,sBAChCloB,EAAMpI,OAAOic,UAAUqU,SAAS,6BAChCloB,EAAMpI,OAAOic,UAAUqU,SAAS,kBAChCloB,EAAMpI,OAAOic,UAAUqU,SAAS,2BAChCloB,EAAMpI,OAAOic,UAAUqU,SAAS,kCAChCD,EAAQnT,QAAQ7W,EAAE,qBAAqBlP,SACxCkP,EAAE,oBAAoBgC,GAAG,aAEzBqP,GAEJ,EAEA,SAAS6Y,IACPP,EAAwBhE,yBAAyB,KACnD,CAIA,IAAMwE,EAAqB,SAACvwB,GAC1B,IAAQypB,EAAmCsG,EAAnCtG,QAASmF,EAA0BmB,EAA1BnB,sBACjB,IAAKA,EAAuB,OAAO,KAEnC,IAAQ97B,EAAU87B,EAAV97B,MACR,OAAI22B,GAAW32B,IAAUkN,EAAa,KAGpChC,EAAAA,cAACwyB,EAAAA,QAAS,CACRzyB,YAAauyB,EACbhyB,KAAMvE,EAAMmwB,cACZvV,QAASkX,EACTjX,sBAAoB,EACpBxD,aAAcrX,EAAMqX,cACrB,kCAIL,EAEA,OACEpT,EAAAA,cAAA,OAAKS,UAAU,aACbT,EAAAA,cAAA,OAAKS,UAAU,OACbT,EAAAA,cAACyyB,EAAAA,EAAa,CAACT,aAAcA,EAAcU,UAAU,oBACnD1yB,EAAAA,cAAA,OACES,UAAS,mBAAArD,OACPu0B,GAAqB,2BAA0B,uBAGjD3xB,EAAAA,cAAA,OAAKS,UAAU,mCACbT,EAAAA,cAACwuB,EAAAA,QAAmBmE,SAAQ,CAAC79B,MAAOi9B,GAClC/xB,EAAAA,cAAA,UAAI,sBACJA,EAAAA,cAAA,OAAKS,UAAU,wBACZ8xB,EAAmB,YACpBvyB,EAAAA,cAAC4yB,EAAAA,QAAmB,OAEtB5yB,EAAAA,cAAA,OAAKS,UAAU,wBACZ8xB,EAAmB,QACpBvyB,EAAAA,cAAC6yB,EAAAA,QAAkB,MACnB7yB,EAAAA,cAAC8yB,EAAAA,QAAgB,OAEnB9yB,EAAAA,cAAA,OAAKS,UAAU,wBACZ8xB,EAAmB,cACpBvyB,EAAAA,cAAC+yB,EAAAA,QAAwB,OAE3B/yB,EAAAA,cAAA,OAAKS,UAAU,wBACZ8xB,EAAmB,kBACpBvyB,EAAAA,cAACgzB,EAAAA,QAA4B,OAE/BhzB,EAAAA,cAAA,OAAKS,UAAU,wBACZ8xB,EAAmB,oBACpBvyB,EAAAA,cAACizB,EAAAA,QAA8B,OAEjCjzB,EAAAA,cAAA,OAAKS,UAAU,oDACbT,EAAAA,cAAA,OAAKS,UAAU,2BAA0B,kBACxC8xB,EAAmB,UACpBvyB,EAAAA,cAACkzB,EAAAA,QAA4B,CAC3BxM,UAAW3qB,EAAMm1B,kBAAkBxK,YAErC1mB,EAAAA,cAACmzB,EAAAA,QAA0B,MAC3BnzB,EAAAA,cAACozB,EAAAA,QAAuB,OAE1BpzB,EAAAA,cAAA,OAAKS,UAAU,wBACZ8xB,EAAmB,cACpBvyB,EAAAA,cAACqzB,EAAAA,QAAwB,UAKjCrzB,EAAAA,cAAA,OAAKS,UAAU,yDACbT,EAAAA,cAAC6wB,EAAS,CAACyC,kBAAmBv3B,EAAMqxB,QACpCptB,EAAAA,cAACmxB,EAAa5tB,EAAA,GAAKxH,EAAK,CAAEs1B,YAhHpC,WACEO,GAAqB,GACrBxpB,EAAE,QAAQmrB,OACR,mFAGF31B,SAASH,iBAAiB,QAAS00B,GACnCv0B,SAASH,iBAAiB,WAAY00B,EACxC,QA8GF,EAEAT,EAAOxvB,UAAYA,EACnBwvB,EAAOrvB,aA7Lc,CACnBopB,SAAS,EACT2B,MAAO,GACPha,cAAc,EACdqa,8BAA8B,GA2LhC,uFCnQO,IAAMhH,EAAgB,CAC3B,CACEniB,MAAO,SACPxP,MAAO,UAET,CACEwP,MAAO,OACPxP,MAAO,QAET,CACEwP,MAAO,YACPxP,MAAO,cAIEyxB,EAAoB,CAC/B,CACEjiB,MAAO,QACPxP,MAAO,SAET,CACEwP,MAAO,4BACPxP,MAAO,6BAET,CACEwP,MAAO,qBACPxP,MAAO,sBAET,CACEwP,MAAO,wBACPxP,MAAO,yBAET,CACEwP,MAAO,iBACPxP,MAAO,kBAET,CACEwP,MAAO,mCACPxP,MAAO,oCAET,CACEwP,MAAO,4CACPxP,MAAO,6CAET,CACEwP,MAAO,QACPxP,MAAO,yDC5CX,SACE40B,iBAAkB,CAChB,YAAa,oBACb,eAAgB,uBAChB8J,aAAc,kBACd,WAAY,mBACZ,gBAAiB,wBACjB,mBAAoB,2BACpBC,OAAQ,kBACR,gBAAiB,qBACjBC,UAAW,sBAEbC,kBAAmB,CACjB,CACErvB,MAAO,iBACPxP,MAAO,cAET,CACEwP,MAAO,SACPxP,MAAO,yBAET,CACEwP,MAAO,SACPxP,MAAO,qBAET,CACEwP,MAAO,UACPxP,MAAO,sBAET,CACEwP,MAAO,aACPxP,MAAO,yBAET,CACEwP,MAAO,QACPxP,MAAO,oBAET,CACEwP,MAAO,SACPxP,MAAO,sBAET,CACEwP,MAAO,qBACPxP,MAAO,kCAET,CACEwP,MAAO,UACPxP,MAAO,oBAET,CACEwP,MAAO,mBACPxP,MAAO,2BAGX8+B,qBAAsB,CACpB,CACEtvB,MAAO,oBACPxP,MAAO,iBAET,CACEwP,MAAO,SACPxP,MAAO,+BAET,CACEwP,MAAO,SACPxP,MAAO,wBAET,CACEwP,MAAO,UACPxP,MAAO,yBAET,CACEwP,MAAO,iBACPxP,MAAO,iCAGX++B,gBAAiB,CACf,CACEvvB,MAAO,mBACPxP,MAAO,iBAET,CACEwP,MAAO,SACPxP,MAAO,+BAET,CACEwP,MAAO,SACPxP,MAAO,yBAGXg/B,iBAAkB,CAChB,CACExvB,MAAO,gBACPxP,MAAO,wBAGXi/B,sBAAuB,CACrB,CACEzvB,MAAO,oBACPxP,MAAO,kBAET,CACEwP,MAAO,oCACPxP,MAAO,kDAET,CACEwP,MAAO,iBACPxP,MAAO,iCAET,CACEwP,MAAO,SACPxP,MAAO,yBAET,CACEwP,MAAO,WACPxP,MAAO,2BAET,CACEwP,MAAO,kCACPxP,MAAO,kDAET,CACEwP,MAAO,QACPxP,MAAO,0BAGXk/B,yBAA0B,CACxB,CACE1vB,MAAO,uBACPxP,MAAO,qBAET,CACEwP,MAAO,0BACPxP,MAAO,6CAET,CACEwP,MAAO,cACPxP,MAAO,gCAET,CACEwP,MAAO,sBACPxP,MAAO,uCAET,CACEwP,MAAO,YACPxP,MAAO,+BAET,CACEwP,MAAO,SACPxP,MAAO,4BAET,CACEwP,MAAO,8BACPxP,MAAO,iDAET,CACEwP,MAAO,UACPxP,MAAO,8BAET,CACEwP,MAAO,oCACPxP,MAAO,wDAET,CACEwP,MAAO,iCACPxP,MAAO,iDAET,CACEwP,MAAO,6BACPxP,MAAO,iDAET,CACEwP,MAAO,WACPxP,MAAO,+BAET,CACEwP,MAAO,QACPxP,MAAO,6BAGXm/B,gBAAiB,CACf,CACE3vB,MAAO,aACPxP,MAAO,WAET,CACEwP,MAAO,eACPxP,MAAO,yBAET,CACEwP,MAAO,mBACPxP,MAAO,6BAET,CACEwP,MAAO,QACPxP,MAAO,mBAGXo/B,mBAAoB,CAClB,CACE5vB,MAAO,kBACPxP,MAAO,kBAET,CACEwP,MAAO,WACPxP,MAAO,2BAET,CACEwP,MAAO,gBACPxP,MAAO,gCAET,CACEwP,MAAO,eACPxP,MAAO,+BAET,CACEwP,MAAO,QACPxP,MAAO,0BAGXq/B,mBAAoB,CAClB,CACE7vB,MAAO,gBACPxP,MAAO,cAET,CACEwP,MAAO,QACPxP,MAAO,sECrOb,SACE,CACEwP,MAAO,WACPxP,MAAO,YAET,CACEwP,MAAO,cACPxP,MAAO,eAET,CACEwP,MAAO,SACPxP,MAAO,UAET,CACEwP,MAAO,8BACPxP,MAAO,iCAET,CACEwP,MAAO,SACPxP,MAAO,UAET,CACEwP,MAAO,QACPxP,MAAO,SAET,CACEwP,MAAO,sBACPxP,MAAO,uBAET,CACEwP,MAAO,SACPxP,MAAO,UAET,CACEwP,MAAO,oBACPxP,MAAO,qBAET,CACEwP,MAAO,mBACPxP,MAAO,sBAET,CACEwP,MAAO,QACPxP,MAAO,SAET,CACEwP,MAAO,qBACPxP,MAAO,sBAET,CACEwP,MAAO,YACPxP,MAAO,aAET,CACEwP,MAAO,UACPxP,MAAO,WAET,CACEwP,MAAO,YACPxP,MAAO,aAET,CACEwP,MAAO,QACPxP,MAAO,SAET,CACEwP,MAAO,OACPxP,MAAO,QAET,CACEwP,MAAO,UACPxP,MAAO,WAET,CACEwP,MAAO,aACPxP,MAAO,cAET,CACEwP,MAAO,UACPxP,MAAO,WAET,CACEwP,MAAO,eACPxP,MAAO,gBAET,CACEwP,MAAO,UACPxP,MAAO,WAET,CACEwP,MAAO,QACPxP,MAAO,SAET,CACEwP,MAAO,UACPxP,MAAO,WAET,CACEwP,MAAO,SACPxP,MAAO,UAET,CACEwP,MAAO,qBACPxP,MAAO,sBAET,CACEwP,MAAO,gCACPxP,MAAO,mCAET,CACEwP,MAAO,SACPxP,MAAO,UAET,CACEwP,MAAO,OACPxP,MAAO,QAET,CACEwP,MAAO,QACPxP,MAAO,SAET,CACEwP,MAAO,gBACPxP,MAAO,iBAET,CACEwP,MAAO,SACPxP,MAAO,UAET,CACEwP,MAAO,cACPxP,MAAO,eAET,CACEwP,MAAO,YACPxP,MAAO,aAET,CACEwP,MAAO,2BACPxP,MAAO,4BAET,CACEwP,MAAO,UACPxP,MAAO,WAET,CACEwP,MAAO,+BACPxP,MAAO,gCAET,CACEwP,MAAO,iBACPxP,MAAO,kBAET,CACEwP,MAAO,mBACPxP,MAAO,oBAET,CACEwP,MAAO,MACPxP,MAAO,OAET,CACEwP,MAAO,QACPxP,MAAO,SAET,CACEwP,MAAO,QACPxP,MAAO,SAET,CACEwP,MAAO,WACPxP,MAAO,YAET,CACEwP,MAAO,YACPxP,MAAO,aAET,CACEwP,MAAO,SACPxP,MAAO,UAET,CACEwP,MAAO,WACPxP,MAAO,YAET,CACEwP,MAAO,wBACPxP,MAAO,yBAET,CACEwP,MAAO,aACPxP,MAAO,cAET,CACEwP,MAAO,eACPxP,MAAO,gBAET,CACEwP,MAAO,QACPxP,MAAO,SAET,CACEwP,MAAO,QACPxP,MAAO,SAET,CACEwP,MAAO,oBACPxP,MAAO,qBAET,CACEwP,MAAO,kBACPxP,MAAO,mBAET,CACEwP,MAAO,SACPxP,MAAO,UAET,CACEwP,MAAO,UACPxP,MAAO,WAET,CACEwP,MAAO,SACPxP,MAAO,UAET,CACEwP,MAAO,kBACPxP,MAAO,mBAET,CACEwP,MAAO,kBACPxP,MAAO,mBAET,CACEwP,MAAO,oBACPxP,MAAO,qBAET,CACEwP,MAAO,kBACPxP,MAAO,mBAET,CACEwP,MAAO,oBACPxP,MAAO,qBAET,CACEwP,MAAO,kBACPxP,MAAO,mBAET,CACEwP,MAAO,oBACPxP,MAAO,uBAET,CACEwP,MAAO,UACPxP,MAAO,WAET,CACEwP,MAAO,cACPxP,MAAO,eAET,CACEwP,MAAO,UACPxP,MAAO,WAET,CACEwP,MAAO,gBACPxP,MAAO,iBAET,CACEwP,MAAO,cACPxP,MAAO,eAET,CACEwP,MAAO,mBACPxP,MAAO,sECnRX,SACE,CACEwP,MAAO,MACPxP,MAAO,KAET,CACEwP,MAAO,MACPxP,MAAO,KAET,CACEwP,MAAO,MACPxP,MAAO,KAET,CACEwP,MAAO,MACPxP,MAAO,KAET,CACEwP,MAAO,MACPxP,MAAO,KAET,CACEwP,MAAO,MACPxP,MAAO,KAET,CACEwP,MAAO,OACPxP,MAAO,MAET,CACEwP,MAAO,OACPxP,MAAO,MAET,CACEwP,MAAO,OACPxP,MAAO,MAET,CACEwP,MAAO,mBACPxP,MAAO,oECvCX,SACE,CACEwP,MAAO,aACPxP,MAAO,aAET,CACEwP,MAAO,gBACPxP,MAAO,gBAET,CACEwP,MAAO,eACPxP,MAAO,gBAET,CACEwP,MAAO,YACPxP,MAAO,4DCfX,SACE,CACEwP,MAAO,YACPxP,MAAO,aAET,CACEwP,MAAO,eACPxP,MAAO,gBAET,CACEwP,MAAO,kBACPxP,MAAO,mBAET,CACEwP,MAAO,sBACPxP,MAAO,uBAET,CACEwP,MAAO,iBACPxP,MAAO,kBAET,CACEwP,MAAO,mBACPxP,MAAO,oBAET,CACEwP,MAAO,UACPxP,MAAO,WAET,CACEwP,MAAO,iBACPxP,MAAO,kBAET,CACEwP,MAAO,gBACPxP,MAAO,iBAET,CACEwP,MAAO,WACPxP,MAAO,YAET,CACEwP,MAAO,UACPxP,MAAO,WAET,CACEwP,MAAO,kBACPxP,MAAO,mBAET,CACEwP,MAAO,qBACPxP,MAAO,sBAET,CACEwP,MAAO,YACPxP,MAAO,aAET,CACEwP,MAAO,gBACPxP,MAAO,iBAET,CACEwP,MAAO,aACPxP,MAAO,cAET,CACEwP,MAAO,kBACPxP,MAAO,mBAET,CACEwP,MAAO,kBACPxP,MAAO,mBAET,CACEwP,MAAO,gBACPxP,MAAO,iBAET,CACEwP,MAAO,kBACPxP,MAAO,mBAET,CACEwP,MAAO,UACPxP,MAAO,WAET,CACEwP,MAAO,cACPxP,MAAO,eAET,CACEwP,MAAO,sBACPxP,MAAO,uBAET,CACEwP,MAAO,aACPxP,MAAO,cAET,CACEwP,MAAO,YACPxP,MAAO,aAET,CACEwP,MAAO,oBACPxP,MAAO,qECvGX,SACE,CACEwP,MAAO,uDACPxP,MAAO,mDAET,CACEwP,MAAO,uDACPxP,MAAO,mDAET,CACEwP,MAAO,0DACPxP,MAAO,sDAET,CACEwP,MAAO,yCACPxP,MAAO,0CAET,CACEwP,MAAO,4CACPxP,MAAO,6CAET,CACEwP,MAAO,mDACPxP,MAAO,oDAET,CACEwP,MAAO,qCACPxP,MAAO,iCAET,CACEwP,MAAO,2CACPxP,MAAO,uCAET,CACEwP,MAAO,wCACPxP,MAAO,oCAET,CACEwP,MAAO,yCACPxP,MAAO,qCAET,CACEwP,MAAO,mCACPxP,MAAO,+BAET,CACEwP,MAAO,uCACPxP,MAAO,mCAET,CACEwP,MAAO,0CACPxP,MAAO,sCAET,CACEwP,MAAO,sCACPxP,MAAO,kCAET,CACEwP,MAAO,0CACPxP,MAAO,sCAET,CACEwP,MAAO,mCACPxP,MAAO,+BAET,CACEwP,MAAO,4CACPxP,MAAO,wCAET,CACEwP,MAAO,mCACPxP,MAAO,+BAET,CACEwP,MAAO,uCACPxP,MAAO,mCAET,CACEwP,MAAO,mCACPxP,MAAO,+BAET,CACEwP,MAAO,+CACPxP,MAAO,2CAET,CACEwP,MAAO,mCACPxP,MAAO,+BAET,CACEwP,MAAO,wCACPxP,MAAO,oCAET,CACEwP,MAAO,uCACPxP,MAAO,mCAET,CACEwP,MAAO,sCACPxP,MAAO,kCAET,CACEwP,MAAO,kDACPxP,MAAO,8CAET,CACEwP,MAAO,4CACPxP,MAAO,wCAET,CACEwP,MAAO,0CACPxP,MAAO,sCAET,CACEwP,MAAO,2CACPxP,MAAO,uCAET,CACEwP,MAAO,oDACPxP,MAAO,gDAET,CACEwP,MAAO,0CACPxP,MAAO,sCAET,CACEwP,MAAO,4CACPxP,MAAO,wCAET,CACEwP,MAAO,oCACPxP,MAAO,gCAET,CACEwP,MAAO,iDACPxP,MAAO,6CA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","sources":["webpack://lc3/./app/javascript/components/ai_tools/AIForm.jsx","webpack://lc3/./app/javascript/components/ai_tools/AskLitchartsAI.jsx","webpack://lc3/./app/javascript/components/ai_tools/DiscussionQuestions.jsx","webpack://lc3/./app/javascript/components/ai_tools/EssayPrompts.jsx","webpack://lc3/./app/javascript/components/ai_tools/InContentAIForm.jsx","webpack://lc3/./app/javascript/components/ai_tools/InContentAskLitchartsAI.jsx","webpack://lc3/./app/javascript/components/ai_tools/QuizQuestions.jsx","webpack://lc3/./app/javascript/components/ai_tools/constants/index.js","webpack://lc3/./app/javascript/components/ai_tools/hooks/useChatMessages.jsx","webpack://lc3/./app/javascript/components/ai_tools/hooks/useFormDisableFields.jsx","webpack://lc3/./app/javascript/components/ai_tools/hooks/useFormText.jsx","webpack://lc3/./app/javascript/components/ai_tools/hooks/useSessionStorage.jsx","webpack://lc3/./app/javascript/components/ai_tools/hooks/useWindowResizeAndFormCollapse.jsx","webpack://lc3/./app/javascript/components/ai_tools/layout/AIToolsLayout.jsx","webpack://lc3/./app/javascript/components/ai_tools/shared/AIForm/AIFormLayout.jsx","webpack://lc3/./app/javascript/components/ai_tools/shared/AIForm/AIFormSubheading.jsx","webpack://lc3/./app/javascript/components/ai_tools/shared/AIForm/AIFormTitle.jsx","webpack://lc3/./app/javascript/components/ai_tools/shared/AIForm/DisclaimerText.jsx","webpack://lc3/./app/javascript/components/ai_tools/shared/AIForm/LockedInformationBanner.jsx","webpack://lc3/./app/javascript/components/ai_tools/shared/ChatArea/CopyAndSaveReminder.jsx","webpack://lc3/./app/javascript/components/ai_tools/shared/ChatArea/InitialMessage.jsx","webpack://lc3/./app/javascript/components/ai_tools/shared/ChatArea/InitialMessageBullets.jsx","webpack://lc3/./app/javascript/components/ai_tools/shared/ChatArea/InitialMessageDescription.jsx","webpack://lc3/./app/javascript/components/ai_tools/shared/ChatArea/InitialMessageExample.jsx","webpack://lc3/./app/javascript/components/bookmarks/BookmarkList.jsx","webpack://lc3/./app/javascript/components/books/RelatedThemes.jsx","webpack://lc3/./app/javascript/components/books/SummaryAnalysisAPlusDialog.jsx","webpack://lc3/./app/javascript/components/groups/info/GroupsInfoExpandableFaqRow.jsx","webpack://lc3/./app/javascript/components/groups/info/GroupsInfoFaqRow.jsx","webpack://lc3/./app/javascript/components/lit_devices/ChaptersRow.jsx","webpack://lc3/./app/javascript/components/lit_devices/ChaptersView.jsx","webpack://lc3/./app/javascript/components/lit_devices/Content.jsx","webpack://lc3/./app/javascript/components/lit_devices/DevicesRow.jsx","webpack://lc3/./app/javascript/components/lit_devices/DevicesView.jsx","webpack://lc3/./app/javascript/components/lit_devices/Filters.jsx","webpack://lc3/./app/javascript/components/lit_devices/LandingPage.jsx","webpack://lc3/./app/javascript/components/lit_devices/PageDescription.jsx","webpack://lc3/./app/javascript/components/lit_devices/QueryParamsControls.jsx","webpack://lc3/./app/javascript/components/navigation/Menu.jsx","webpack://lc3/./app/javascript/components/navigation/MenuItem.jsx","webpack://lc3/./app/javascript/components/navigation/MenuParent.jsx","webpack://lc3/./app/javascript/components/poetry/poems/show/AiToolToggle.jsx","webpack://lc3/./app/javascript/components/poetry/poems/show/ComponentItemSelect.jsx","webpack://lc3/./app/javascript/components/poetry/poems/show/UncachedAITool.jsx","webpack://lc3/./app/javascript/components/quizzes/QuizBanner.jsx","webpack://lc3/./app/javascript/components/quizzes/QuizCard/QuizAnswerChoice.jsx","webpack://lc3/./app/javascript/components/quizzes/QuizCard/QuizAnswerChoiceIcon.jsx","webpack://lc3/./app/javascript/components/quizzes/QuizCard/QuizCard.jsx","webpack://lc3/./app/javascript/components/quizzes/QuizCard/QuizCardResult.jsx","webpack://lc3/./app/javascript/components/quizzes/QuizCard/QuizCardResultText.jsx","webpack://lc3/./app/javascript/components/quizzes/QuizCard/ReviewButton.jsx","webpack://lc3/./app/javascript/components/quizzes/QuizResult.jsx","webpack://lc3/./app/javascript/components/quizzes/QuizSubmission.jsx","webpack://lc3/./app/javascript/components/quizzes/ResultsPanel.jsx","webpack://lc3/./app/javascript/components/quizzes/constants.js","webpack://lc3/./app/javascript/components/search/AuthorEthnicityMultiSelect.jsx","webpack://lc3/./app/javascript/components/search/AuthorGenderMultiSelect.jsx","webpack://lc3/./app/javascript/components/search/AuthorNationalityMultiSelect.jsx","webpack://lc3/./app/javascript/components/search/GenreMultiSelect.jsx","webpack://lc3/./app/javascript/components/search/GradeLevelRefinementList.jsx","webpack://lc3/./app/javascript/components/search/GuideRefinementList.jsx","webpack://lc3/./app/javascript/components/search/LiteraryMovementRefinementList.jsx","webpack://lc3/./app/javascript/components/search/LiteraryPeriodRefinementList.jsx","webpack://lc3/./app/javascript/components/search/TimePeriodRefinementList.jsx","webpack://lc3/./app/javascript/components/search/TypeRefinementList.jsx","webpack://lc3/./app/javascript/components/search/base/CurrentRefinements.jsx","webpack://lc3/./app/javascript/components/search/base/Flyout.jsx","webpack://lc3/./app/javascript/components/search/base/HierarchicalRefinementList.jsx","webpack://lc3/./app/javascript/components/search/base/HierarchicalRefinementListElement.jsx","webpack://lc3/./app/javascript/components/search/base/Hit.jsx","webpack://lc3/./app/javascript/components/search/base/Hits.jsx","webpack://lc3/./app/javascript/components/search/base/MultiSelectRefinementList.jsx","webpack://lc3/./app/javascript/components/search/base/NoResults.jsx","webpack://lc3/./app/javascript/components/search/base/RefineElement.jsx","webpack://lc3/./app/javascript/components/search/base/RefinementList.jsx","webpack://lc3/./app/javascript/components/search/context/FilterPromoContext.js","webpack://lc3/./app/javascript/components/search/index.js","webpack://lc3/./app/javascript/components/search/references/authorCategories.js","webpack://lc3/./app/javascript/components/search/references/flyoutReference.js","webpack://lc3/./app/javascript/components/search/references/genreCategories.js","webpack://lc3/./app/javascript/components/search/references/gradeLevelCategories.js","webpack://lc3/./app/javascript/components/search/references/guideCategories.js","webpack://lc3/./app/javascript/components/search/references/literaryMovementCategories.js","webpack://lc3/./app/javascript/components/search/references/literaryPeriodCategories.js","webpack://lc3/./app/javascript/components/search/references/promoAttributeReference.js","webpack://lc3/./app/javascript/components/search/references/timePeriodCategories.js","webpack://lc3/./app/javascript/components/search/references/typeCategories.js","webpack://lc3/./app/javascript/components/users/downloads/UserDownloadsSortControl.jsx","webpack://lc3/./app/javascript/components/users/highlights/UserHighlightsFilterControl.jsx","webpack://lc3/./app/javascript/components/views/static/GdprRequestForm.jsx","webpack://lc3/./app/javascript/constants/literary_devices/index.js","webpack://lc3/./app/javascript/initializers/base.js","webpack://lc3/./app/javascript/initializers/globalViews.js","webpack://lc3/./app/javascript/initializers/toast.js"],"sourcesContent":["import React, { useEffect, useLayoutEffect, useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport classnames from \"classnames\";\nimport pluralize from \"pluralize\";\nimport { Formik, yupToFormErrors } from \"formik\";\nimport * as Yup from \"yup\";\nimport { SM_PIXEL_MIN, XS_PIXEL_MAX } from \"constants/breakpoints\";\nimport InputTextCounter from \"components/shared/InputTextCounter\";\nimport Select from \"components/shared/Select\";\nimport IconButton from \"components/shared/IconButton\";\nimport { AI_ANSWERS_QUOTA } from \"components/ai_tools/constants\";\nimport DisclaimerText from \"components/ai_tools/shared/AIForm/DisclaimerText\";\n\nconst sessionStorageKey = \"askLitchartsAi\";\n\nconst validationSchema = Yup.object().shape({\n title: Yup.string().required(\"Please select your title\"),\n question: Yup.string()\n .required(\"25 characters required\")\n .min(25, \"25 characters required\")\n .max(300, \"Over max character limit\"),\n});\n\nconst AIForm = (props) => {\n const {\n loading,\n locked,\n onSubmit,\n options = [],\n questionMinimum,\n quotaRemaining,\n resetDate,\n signupPath,\n values,\n } = props;\n const [isLessThanSmallBreakpoint, setIsLessThanSmallBreakpoint] =\n useState(true);\n const [collapsed, setCollapsed] = useState(true);\n const disableFields = !locked && quotaRemaining === 0;\n\n const resizeHandler = () => {\n if (window.matchMedia(`(min-width: ${SM_PIXEL_MIN}px)`).matches) {\n setIsLessThanSmallBreakpoint(false);\n } else if (window.matchMedia(`(max-width: ${XS_PIXEL_MAX}px)`).matches) {\n setIsLessThanSmallBreakpoint(true);\n }\n };\n\n useLayoutEffect(() => {\n resizeHandler();\n window.addEventListener(\"resize\", resizeHandler);\n return () => {\n window.removeEventListener(\"resize\", resizeHandler);\n };\n }, []);\n\n useLayoutEffect(() => {\n setCollapsed(isLessThanSmallBreakpoint);\n }, [isLessThanSmallBreakpoint]);\n\n useEffect(() => {\n // Prevent the body from scrolling underneath the form field when on small screen\n // and expanded\n if (!collapsed && isLessThanSmallBreakpoint) {\n document.body.style.overflow = \"hidden\";\n } else {\n document.body.style.overflow = \"auto\";\n }\n }, [collapsed]);\n\n const buttonRemainingText =\n !locked && quotaRemaining > 0 ? ` (${quotaRemaining} left)` : \"\";\n let buttonCTA = \"Ask LitCharts AI\";\n if (quotaRemaining > 0 && !collapsed && isLessThanSmallBreakpoint) {\n buttonCTA = \"Submit\";\n } else if (quotaRemaining > 0 && quotaRemaining < 25) {\n buttonCTA = \"Ask New Question\";\n }\n const buttonText = buttonCTA + buttonRemainingText;\n const resetText = `${pluralize(\n \"answers\",\n quotaRemaining,\n true\n )} left (resets on ${resetDate})`;\n const showDisclaimerText = !collapsed || (collapsed && quotaRemaining === 0);\n\n const unpackValueFromStorage = (key) => {\n const storageKey = `${sessionStorageKey}:${key}`;\n const storedValue = sessionStorage.getItem(storageKey) || \"\";\n\n sessionStorage.removeItem(storageKey);\n\n return storedValue;\n };\n\n const initialValues = {\n question: !disableFields\n ? unpackValueFromStorage(\"question\") || values.question\n : \"\",\n title: !disableFields\n ? unpackValueFromStorage(\"title\") || values.title\n : \"\",\n };\n\n const storeFieldForReload = (key, value) => {\n if (locked && !disableFields) {\n const storageKey = `${sessionStorageKey}:${key}`;\n sessionStorage.setItem(storageKey, value);\n }\n };\n\n const handleSubmit = (formValues) => {\n // Locked, redirect to sales page\n if (locked && !disableFields) {\n window.location.href = signupPath;\n return;\n }\n\n // We're in a collapsed state (smaller breakpoints)\n // Expand the form\n if (collapsed) {\n setCollapsed(false);\n return;\n }\n\n // pass the values up to the parent to handle submission\n onSubmit(formValues);\n\n // If we're in smaller breakpoints, collapse the form\n if (isLessThanSmallBreakpoint) {\n setCollapsed(true);\n }\n };\n\n const validateForm = async (formValues) => {\n let yupFormErrors = {};\n\n if (collapsed && isLessThanSmallBreakpoint) {\n return yupFormErrors;\n }\n\n if (locked) {\n return yupFormErrors;\n }\n\n try {\n await validationSchema.validate(formValues, { abortEarly: false });\n } catch (e) {\n yupFormErrors = yupToFormErrors(e);\n }\n\n return yupFormErrors;\n };\n\n const handleClose = () => {\n setCollapsed(true);\n };\n\n const amplitudeSignupAttr = () => {\n let attr;\n if (locked && !disableFields) {\n attr = \"aiSignupForm\"; // we're free tier and signing up\n } else {\n attr = \"aiQuestionAsked\"; // we're subbed and asking a question\n }\n attr += isLessThanSmallBreakpoint ? \"Small\" : \"Large\";\n if (collapsed && isLessThanSmallBreakpoint) {\n attr += \"Collapsed\";\n }\n return attr;\n };\n\n return (\n <Formik\n initialValues={initialValues}\n validateOnBlur={false}\n validateOnChange={false}\n validateOnMount={false}\n validate={validateForm}\n onSubmit={handleSubmit}\n >\n {(formik) => (\n <form\n onSubmit={formik.handleSubmit}\n className={classnames(\"ai-form--container\", { collapsed })}\n >\n <div className=\"ai-form--header\">\n <div className=\"title-5\">Ask LitCharts AI</div>\n <div className=\"subtitle-1\">\n The only tool that combines the world's best literary\n analysis with the power of AI.\n </div>\n <IconButton\n iconClass=\"lc-icon-close lc-icon-xs\"\n btnClass=\"btn-lg btn-borderless-alt\"\n onClick={handleClose}\n />\n </div>\n <div className=\"ai-form--content\">\n <div className=\"ai-form--body\">\n <div\n className=\"ai-form--banner lc-banner lc-banner-information\"\n data-testid=\"ai-form-banner\"\n >\n {locked ? (\n <a href={signupPath} data-amplitude=\"aiSignupBanner\">\n Get {AI_ANSWERS_QUOTA} answers per month\n </a>\n ) : (\n resetText\n )}\n </div>\n <div className=\"ai-form--fields\">\n <Select\n errorMessage={formik.errors.title}\n id=\"title\"\n isDisabled={loading || disableFields}\n isSearchable\n labelText=\"Title\"\n name=\"title\"\n options={options}\n placeholder={\n !disableFields ? \"e.g. Hamlet (Shakespeare)\" : \"\"\n }\n onChange={(e) => {\n const fieldKey = \"title\";\n storeFieldForReload(fieldKey, e.value);\n formik.setFieldValue(fieldKey, e.value);\n }}\n value={formik.values.title}\n />\n <InputTextCounter\n disabled={loading || disableFields}\n hideSubtext={disableFields}\n errorMessage={formik.errors.question}\n labelText=\"Question\"\n key={`collapsed-${collapsed}`}\n name=\"question\"\n min={questionMinimum}\n max={300}\n onChange={(e) => {\n const fieldKey = \"question\";\n formik.setFieldError(fieldKey, null);\n storeFieldForReload(fieldKey, e.target.value);\n formik.setFieldValue(fieldKey, e.target.value);\n }}\n // eslint-disable-next-line max-len\n placeholder={\n !disableFields\n ? \"e.g. In Act 3, scene 3, why does Hamlet decide not to kill Claudius while Claudius is praying?\"\n : \"\"\n }\n value={formik.values.question}\n />\n </div>\n </div>\n <div className=\"ai-form--footer\">\n <button\n className={`ai-form--submit btn btn-a-plus button-1 ${\n isLessThanSmallBreakpoint ? \"btn-lg\" : \"btn-block\"\n }`}\n data-testid=\"ai-form-submit\"\n data-amplitude={amplitudeSignupAttr()}\n disabled={disableFields || loading}\n type=\"submit\"\n >\n {locked && (\n <i\n className=\"lc-icon lc-icon-lock-filled lc-icon-sm\"\n data-testid=\"lock-icon\"\n />\n )}\n {loading ? \"Answering...\" : buttonText}\n </button>\n {!locked && showDisclaimerText && (\n <div className=\"subtitle-1 tw-flex tw-pt-2 tw-text-gray-tint-40\">\n {collapsed && quotaRemaining === 0 && resetText}\n {!collapsed && (\n <DisclaimerText className=\"tw-self-center tw-text-center tw-flex-grow\" />\n )}\n </div>\n )}\n </div>\n </div>\n </form>\n )}\n </Formik>\n );\n};\n\nAIForm.propTypes = {\n loading: PropTypes.bool,\n locked: PropTypes.bool,\n onSubmit: PropTypes.func,\n options: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string,\n value: PropTypes.string,\n })\n ),\n questionMinimum: PropTypes.number,\n quotaRemaining: PropTypes.number.isRequired,\n resetDate: PropTypes.string,\n signupPath: PropTypes.string,\n values: PropTypes.object,\n};\n\nAIForm.defaultProps = {\n loading: false,\n locked: false,\n onSubmit: () => {},\n options: [],\n questionMinimum: 25,\n resetDate: \"\",\n signupPath: \"/sign-up?focus=teacher\",\n values: {},\n};\n\nexport default AIForm;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport AIForm from \"components/ai_tools/AIForm\";\nimport ChatArea from \"components/ai_tools/ChatArea\";\n\nimport AIToolsLayout from \"./layout/AIToolsLayout\";\nimport {\n AI_TOOL_CHANNELS,\n AI_TOOL_NAMES,\n QUESTION_MINIMUM_LENGTH,\n} from \"./constants\";\nimport useChatMessages from \"./hooks/useChatMessages\";\n\nconst AskLitchartsAI = (props) => {\n const {\n quotaRemaining: quotaFromProps,\n locked,\n signupPath,\n submissionPath,\n aiAnswersCompletePath,\n } = props;\n const { loading, quotaRemaining, messages, prevSlug, handleAskAIFormSubmit } =\n useChatMessages({\n submissionPath,\n aiAnswersCompletePath,\n locked,\n upgradeable: false,\n signupPath,\n quotaFromProps,\n eventCategory: \"Ask LitCharts AI\",\n channel: AI_TOOL_CHANNELS.ASK_AI,\n toolName: AI_TOOL_NAMES.ASK_AI,\n });\n\n return (\n <AIToolsLayout>\n <AIForm\n {...props}\n loading={loading}\n onSubmit={handleAskAIFormSubmit}\n // Note, please read before removing. This line causes a re-render that clears\n // out the \"Question\" field while preserving the \"Title\" field upon a\n // successful Ask Litcharts AI response.\n key={`quota-remaining-${quotaRemaining}`}\n quotaRemaining={quotaRemaining}\n questionMinimum={QUESTION_MINIMUM_LENGTH}\n values={{ title: prevSlug }}\n />\n <ChatArea messages={messages} />\n </AIToolsLayout>\n );\n};\n\nAskLitchartsAI.propTypes = {\n submissionPath: PropTypes.string,\n aiAnswersCompletePath: PropTypes.string,\n locked: PropTypes.bool,\n options: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string,\n value: PropTypes.string,\n })\n ),\n questionMinimum: PropTypes.number,\n quotaRemaining: PropTypes.number.isRequired,\n resetDate: PropTypes.string,\n signupPath: PropTypes.string,\n};\n\nAskLitchartsAI.defaultProps = {\n submissionPath: \"/ai/ask-litcharts-ai\",\n aiAnswersCompletePath: \"/ai_answers/complete\",\n locked: false,\n options: [],\n questionMinimum: 25,\n resetDate: \"\",\n signupPath: \"/sign-up?focus=teacher\",\n};\n\nexport default AskLitchartsAI;\n","import React, { useState, useEffect } from \"react\";\nimport PropTypes from \"prop-types\";\nimport Select from \"components/shared/Select\";\nimport ChatArea from \"components/ai_tools/ChatArea\";\nimport { useFormik } from \"formik\";\nimport * as Yup from \"yup\";\nimport pluralize from \"pluralize\";\nimport AIToolsLayout from \"./layout/AIToolsLayout\";\nimport {\n AI_TOOL_CHANNELS,\n AI_TOOL_NAMES,\n AI_TOOLS_LABEL_MAP,\n AI_TOOLS_LOADING_DEFAULTS,\n REUSABLES,\n} from \"./constants\";\nimport useChatMessages from \"./hooks/useChatMessages\";\nimport AIFormLayout from \"./shared/AIForm/AIFormLayout\";\nimport useFormDisableFields from \"./hooks/useFormDisableFields\";\nimport useWindowResizeAndFormCollapse from \"./hooks/useWindowResizeAndFormCollapse\";\n\nconst DiscussionQuestions = (props) => {\n const {\n quotaRemaining: quotaFromProps,\n locked,\n upgradeable,\n signupPath,\n submissionPath,\n aiAnswersCompletePath,\n options,\n } = props;\n\n const validationSchema = Yup.object().shape({\n title: Yup.string().required(\"Please select your title\"),\n topic: Yup.string().when(\"title\", (title) => {\n if (title) {\n return Yup.string().required(\"Please select your topic\");\n }\n }),\n subtopic: Yup.string().when(\"topic\", (_) => {\n if (selectedTopic?.data) {\n return Yup.string().required(\n `Please select your ${\n AI_TOOLS_LABEL_MAP[selectedTopic.label] ??\n selectedTopic.labelText?.toLowerCase()\n }`\n );\n }\n }),\n });\n\n const [loadingTopics, setLoadingTopics] = useState(false);\n const [topics, setTopics] = useState();\n const [selectedTopic, setSelectedTopic] = useState();\n const [selectedSubtopic, setSelectedSubtopic] = useState();\n const { isLessThanSmallBreakpoint, collapsed, setCollapsed } =\n useWindowResizeAndFormCollapse();\n\n const formik = useFormik({\n initialValues: {\n title: prevSlug || \"\",\n topic: \"\",\n subtopic: \"\",\n },\n validateOnChange: false,\n validateOnBlur: false,\n validationSchema,\n onSubmit: (values) => {\n validationSchema\n .validate(values, { abortEarly: false })\n .then(() => {\n handleQuizDiscussionEssayPrompt(values);\n if (isLessThanSmallBreakpoint) {\n setCollapsed(true);\n }\n })\n .catch((errors) => {\n formik.setErrors(errors);\n });\n },\n });\n\n const {\n loading,\n quotaRemaining,\n messages,\n prevSlug,\n handleQuizDiscussionEssayPrompt,\n } = useChatMessages({\n submissionPath,\n aiAnswersCompletePath,\n locked,\n upgradeable,\n signupPath,\n quotaFromProps,\n toolName: AI_TOOL_NAMES.DISCUSSION_QUESTIONS,\n eventCategory: \"Discussion Questions Generator\",\n channel: AI_TOOL_CHANNELS.DISCUSSION_QUESTIONS,\n messageText: selectedSubtopic?.messageText ?? selectedTopic?.messageText,\n formik,\n });\n\n const { disableFields } = useFormDisableFields(locked, quotaRemaining);\n\n const handleError = (timeoutRef) => {\n clearTimeout(timeoutRef);\n setLoadingTopics(false);\n setTopics([]);\n formik.setFieldError(\"topic\", \"Data request failed. Please try again.\");\n };\n\n const fetchDropdownContent = (guidePath) => {\n setTopics();\n setSelectedTopic(null);\n setSelectedSubtopic(null);\n const loadingTimeout = setTimeout(() => {\n setTopics([]);\n setLoadingTopics(true);\n }, 1000);\n\n fetch(guidePath, {\n method: \"GET\",\n })\n .then((response) => {\n if (!response.ok) {\n handleError(loadingTimeout);\n } else {\n return response.json();\n }\n })\n .then((data) => {\n clearTimeout(loadingTimeout);\n setTopics(data.topics);\n setLoadingTopics(false);\n })\n .catch((error) => {\n handleError(loadingTimeout);\n console.error(\"Error fetching dropdown content:\", error);\n });\n };\n\n useEffect(() => {\n formik.setFieldValue(\"title\", prevSlug);\n }, [prevSlug]);\n\n return (\n <AIToolsLayout>\n <AIFormLayout\n {...props}\n collapsed={collapsed}\n isLessThanSmallBreakpoint={isLessThanSmallBreakpoint}\n setCollapsed={setCollapsed}\n toolName={AI_TOOL_NAMES.DISCUSSION_QUESTIONS}\n loading={loading}\n storageKey=\"discussionQuestions\"\n quotaRemaining={quotaRemaining}\n formik={formik}\n >\n <Select\n errorMessage={formik.errors.title}\n id={REUSABLES.TITLE}\n isDisabled={loading || disableFields}\n isSearchable\n labelText=\"Title\"\n name={REUSABLES.TITLE}\n options={options}\n placeholder={!disableFields ? \"e.g. Hamlet (Shakespeare)\" : \"\"}\n onChange={(e) => {\n formik.setFieldValue(REUSABLES.TITLE, e.value);\n formik.setFieldValue(REUSABLES.TOPIC, undefined);\n formik.setFieldValue(REUSABLES.SUBTOPIC, undefined);\n formik.setFieldError(REUSABLES.TOPIC, undefined);\n formik.setFieldError(REUSABLES.SUBTOPIC, undefined);\n fetchDropdownContent(e.guide_path);\n }}\n value={formik.values.title}\n />\n {topics && !disableFields && (\n <Select\n errorMessage={\n loadingTopics && formik.errors.topic\n ? \"Loading, select one when complete\"\n : formik.errors.topic\n }\n id={REUSABLES.TOPIC}\n isDisabled={loadingTopics || loading || disableFields}\n isSearchable\n isControlled\n isLoading={loadingTopics}\n labelText=\"Topic\"\n name={REUSABLES.TOPIC}\n options={loadingTopics ? [AI_TOOLS_LOADING_DEFAULTS] : topics}\n placeholder={!disableFields ? \"e.g. Themes\" : \"\"}\n onChange={(e) => {\n formik.setFieldValue(REUSABLES.TOPIC, e.value);\n formik.setFieldValue(REUSABLES.SUBTOPIC, undefined);\n formik.setFieldError(REUSABLES.SUBTOPIC, undefined);\n\n setSelectedTopic(topics.find((topic) => topic.value === e.value));\n setSelectedSubtopic(null);\n }}\n value={\n loadingTopics\n ? AI_TOOLS_LOADING_DEFAULTS.value\n : formik.values.topic\n }\n />\n )}\n {selectedTopic?.data && !disableFields && (\n <Select\n errorMessage={formik.errors.subtopic}\n id={REUSABLES.SUBTOPIC}\n isDisabled={loading || disableFields}\n isSearchable\n isControlled\n labelText={\n selectedTopic.labelText ??\n pluralize(formik.values.topic, 1, false)\n }\n name={REUSABLES.SUBTOPIC}\n options={selectedTopic.data}\n placeholder={!disableFields ? \"Select one\" : \"\"}\n onChange={(e) => {\n formik.setFieldValue(REUSABLES.SUBTOPIC, e.value);\n setSelectedSubtopic(\n selectedTopic.data.find((topic) => topic.value === e.value)\n );\n }}\n value={formik.values.subtopic}\n />\n )}\n </AIFormLayout>\n <ChatArea messages={messages} />\n </AIToolsLayout>\n );\n};\n\nDiscussionQuestions.propTypes = {\n submissionPath: PropTypes.string,\n aiAnswersCompletePath: PropTypes.string,\n locked: PropTypes.bool,\n upgradeable: PropTypes.bool,\n options: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string,\n value: PropTypes.string,\n })\n ),\n questionMinimum: PropTypes.number,\n quotaRemaining: PropTypes.number.isRequired,\n resetDate: PropTypes.string,\n signupPath: PropTypes.string,\n};\n\nDiscussionQuestions.defaultProps = {\n submissionPath: \"/ai/discussion-question-generator\",\n aiAnswersCompletePath: \"/ai_answers/complete\",\n locked: false,\n upgradeable: false,\n options: [],\n questionMinimum: 25,\n resetDate: \"\",\n signupPath: \"/sign-up?focus=teacher\",\n};\n\nexport default DiscussionQuestions;\n","import React, { useState, useEffect } from \"react\";\nimport PropTypes from \"prop-types\";\nimport Select from \"components/shared/Select\";\nimport ChatArea from \"components/ai_tools/ChatArea\";\nimport { useFormik } from \"formik\";\nimport * as Yup from \"yup\";\nimport AIToolsLayout from \"./layout/AIToolsLayout\";\nimport {\n AI_TOOL_CHANNELS,\n AI_TOOL_NAMES,\n AI_TOOLS_LOADING_DEFAULTS,\n REUSABLES,\n} from \"./constants\";\nimport useChatMessages from \"./hooks/useChatMessages\";\nimport AIFormLayout from \"./shared/AIForm/AIFormLayout\";\nimport useFormDisableFields from \"./hooks/useFormDisableFields\";\nimport useWindowResizeAndFormCollapse from \"./hooks/useWindowResizeAndFormCollapse\";\n\nconst EssayPrompts = (props) => {\n const {\n quotaRemaining: quotaFromProps,\n locked,\n upgradeable,\n signupPath,\n submissionPath,\n aiAnswersCompletePath,\n options,\n } = props;\n\n const validationSchema = Yup.object().shape({\n title: Yup.string().required(\"Please select your title\"),\n topic: Yup.string().when(\"title\", (title) => {\n if (title) {\n return Yup.string().required(\"Please select your topic\");\n }\n }),\n });\n\n const [loadingTopics, setLoadingTopics] = useState(false);\n const [topics, setTopics] = useState();\n const [selectedTopic, setSelectedTopic] = useState();\n const { isLessThanSmallBreakpoint, collapsed, setCollapsed } =\n useWindowResizeAndFormCollapse();\n\n const formik = useFormik({\n initialValues: {\n title: prevSlug || \"\",\n topic: \"\",\n },\n validateOnChange: false,\n validateOnBlur: false,\n validationSchema,\n onSubmit: (values) => {\n validationSchema\n .validate(values, { abortEarly: false })\n .then(() => {\n handleQuizDiscussionEssayPrompt(values);\n if (isLessThanSmallBreakpoint) {\n setCollapsed(true);\n }\n })\n .catch((errors) => {\n formik.setErrors(errors);\n });\n },\n });\n\n const {\n loading,\n quotaRemaining,\n messages,\n prevSlug,\n handleQuizDiscussionEssayPrompt,\n } = useChatMessages({\n submissionPath,\n aiAnswersCompletePath,\n locked,\n upgradeable,\n signupPath,\n quotaFromProps,\n toolName: AI_TOOL_NAMES.ESSAY_PROMPTS,\n eventCategory: \"Essay Prompts Generator\",\n channel: AI_TOOL_CHANNELS.ESSAY_PROMPTS,\n messageText: selectedTopic?.messageText,\n formik,\n });\n\n const { disableFields } = useFormDisableFields(locked, quotaRemaining);\n\n const handleError = (timeoutRef) => {\n clearTimeout(timeoutRef);\n setLoadingTopics(false);\n setTopics([]);\n formik.setFieldError(\"topic\", \"Data request failed. Please try again.\");\n };\n\n const fetchDropdownContent = (guidePath) => {\n setTopics();\n setSelectedTopic(null);\n const loadingTimeout = setTimeout(() => {\n setTopics([]);\n setLoadingTopics(true);\n }, 1000);\n\n fetch(guidePath, {\n method: \"GET\",\n })\n .then((response) => {\n if (!response.ok) {\n handleError(loadingTimeout);\n } else {\n return response.json();\n }\n })\n .then((data) => {\n clearTimeout(loadingTimeout);\n setTopics(data.topics);\n setLoadingTopics(false);\n })\n .catch((error) => {\n handleError(loadingTimeout);\n console.error(\"Error fetching dropdown content:\", error);\n });\n };\n\n useEffect(() => {\n formik.setFieldValue(\"title\", prevSlug);\n }, [prevSlug]);\n\n return (\n <AIToolsLayout>\n <AIFormLayout\n {...props}\n collapsed={collapsed}\n isLessThanSmallBreakpoint={isLessThanSmallBreakpoint}\n setCollapsed={setCollapsed}\n toolName={AI_TOOL_NAMES.ESSAY_PROMPTS}\n loading={loading}\n storageKey=\"essayPrompts\"\n quotaRemaining={quotaRemaining}\n formik={formik}\n >\n <Select\n errorMessage={formik.errors.title}\n id={REUSABLES.TITLE}\n isDisabled={loading || disableFields}\n isSearchable\n labelText=\"Title\"\n name={REUSABLES.TITLE}\n options={options}\n placeholder={!disableFields ? \"e.g. Hamlet (Shakespeare)\" : \"\"}\n onChange={(e) => {\n formik.setFieldValue(REUSABLES.TITLE, e.value);\n formik.setFieldValue(REUSABLES.TOPIC, undefined);\n formik.setFieldError(REUSABLES.TOPIC, undefined);\n fetchDropdownContent(e.guide_path);\n }}\n value={formik.values.title}\n />\n {topics && !disableFields && (\n <Select\n errorMessage={\n loadingTopics && formik.errors.topic\n ? \"Loading, select one when complete\"\n : formik.errors.topic\n }\n id={REUSABLES.TOPIC}\n isDisabled={loadingTopics || loading || disableFields}\n isSearchable\n isControlled\n isLoading={loadingTopics}\n labelText=\"Topic\"\n name={REUSABLES.TOPIC}\n options={loadingTopics ? [AI_TOOLS_LOADING_DEFAULTS] : topics}\n placeholder={!disableFields ? \"e.g. Themes\" : \"\"}\n onChange={(e) => {\n formik.setFieldValue(REUSABLES.TOPIC, e.value);\n\n setSelectedTopic(topics.find((topic) => topic.value === e.value));\n }}\n value={\n loadingTopics\n ? AI_TOOLS_LOADING_DEFAULTS.value\n : formik.values.topic\n }\n />\n )}\n </AIFormLayout>\n <ChatArea messages={messages} />\n </AIToolsLayout>\n );\n};\n\nEssayPrompts.propTypes = {\n submissionPath: PropTypes.string,\n aiAnswersCompletePath: PropTypes.string,\n locked: PropTypes.bool,\n upgradeable: PropTypes.bool,\n options: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string,\n value: PropTypes.string,\n })\n ),\n questionMinimum: PropTypes.number,\n quotaRemaining: PropTypes.number.isRequired,\n resetDate: PropTypes.string,\n signupPath: PropTypes.string,\n};\n\nEssayPrompts.defaultProps = {\n submissionPath: \"/ai/essay-prompt-generator\",\n aiAnswersCompletePath: \"/ai_answers/complete\",\n locked: false,\n upgradeable: false,\n options: [],\n questionMinimum: 25,\n resetDate: \"\",\n signupPath: \"/sign-up?focus=teacher\",\n};\n\nexport default EssayPrompts;\n","import React, { useRef, useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { Formik, yupToFormErrors } from \"formik\";\nimport * as Yup from \"yup\";\nimport Select from \"components/shared/Select\";\nimport InputTextCounter from \"components/shared/InputTextCounter\";\nimport helpers from \"helpers/base\";\n\nconst sessionStorageKey = \"inContentAskLitchartsAi\";\n\nconst validationSchema = Yup.object().shape({\n title: Yup.string().required(\"Please select your title\"),\n question: Yup.string()\n .required(\"25 characters required\")\n .min(25, \"25 characters required\")\n .max(300, \"Over max character limit\"),\n});\n\nconst InContentAIForm = (props) => {\n const {\n loading,\n locked,\n onResourceChange,\n onSubmit,\n options = [],\n questionMinimum,\n quotaRemaining,\n resetText,\n signupPath,\n values,\n } = props;\n const formRef = useRef(null);\n\n const scrollAboveMobileKeyboard = () => {\n // Keeps iPhone keyboard from covering textarea.\n if (isSmallWindow() && helpers.isMobileAgent()) {\n const form = formRef.current;\n\n // Footer height minus a bit so we're not right up against the edge\n const footerHeight = document.querySelector(\".footer\").clientHeight - 10;\n window.scrollTo({\n top: form.offsetTop + form.offsetHeight - footerHeight,\n behavior: \"smooth\",\n });\n }\n };\n\n const isSmallWindow = () => {\n return $(\".context-switch-banner:visible\").length;\n };\n\n const disableFields = !locked && quotaRemaining === 0;\n\n const unpackValueFromStorage = (key) => {\n const storageKey = `${sessionStorageKey}:${key}`;\n const storedValue = sessionStorage.getItem(storageKey) || \"\";\n\n sessionStorage.removeItem(storageKey);\n\n return storedValue;\n };\n\n const [initialValues] = useState(() => {\n return {\n question: !disableFields\n ? unpackValueFromStorage(\"question\") || values.question\n : \"\",\n title: !disableFields\n ? unpackValueFromStorage(\"title\") || values.title\n : \"\",\n };\n });\n\n const storeFieldForReload = (key, value) => {\n if (locked && !disableFields) {\n const storageKey = `${sessionStorageKey}:${key}`;\n sessionStorage.setItem(storageKey, value);\n }\n };\n\n const handleSubmit = (formValues) => {\n // Locked, redirect to sales page\n if (locked && !disableFields) {\n window.location.href = signupPath;\n return;\n }\n\n // pass the values up to the parent to handle submission\n onSubmit(formValues);\n };\n\n const validateForm = async (formValues) => {\n let yupFormErrors = {};\n\n if (locked) {\n return yupFormErrors;\n }\n\n try {\n await validationSchema.validate(formValues, { abortEarly: false });\n } catch (e) {\n yupFormErrors = yupToFormErrors(e);\n }\n\n return yupFormErrors;\n };\n\n return (\n <Formik\n initialValues={initialValues}\n validateOnBlur={false}\n validateOnChange={false}\n validateOnMount={false}\n validate={validateForm}\n onSubmit={handleSubmit}\n >\n {(formik) => (\n <form\n ref={formRef}\n onFocus={scrollAboveMobileKeyboard}\n onSubmit={formik.handleSubmit}\n className=\"ai-form--container in-content\"\n >\n <div className=\"ai-form--content !tw-overflow-y-visible\">\n <div className=\"ai-form--body\">\n {!locked && (\n <div\n className=\"ai-form--banner lc-banner lc-banner-information\"\n data-testid=\"ai-form-banner\"\n >\n {resetText}\n </div>\n )}\n <div className=\"ai-form--fields !tw-gap-3\">\n <Select\n errorMessage={formik.errors.title}\n id=\"title\"\n isDisabled={loading || disableFields}\n isSearchable\n maxMenuHeight={222}\n menuPlacement=\"top\"\n name=\"title\"\n options={options}\n onChange={(e) => {\n const fieldKey = \"title\";\n storeFieldForReload(fieldKey, e.value);\n formik.setFieldValue(fieldKey, e.value);\n onResourceChange(e.value);\n }}\n value={formik.values.title}\n />\n <InputTextCounter\n disabled={loading || disableFields}\n locked={locked}\n amplitudeKey={\n locked\n ? \"AIContentToolSignUpSubmitAttempt\"\n : \"AIContentToolSubmit\"\n }\n hideSubtext={disableFields}\n errorMessage={formik.errors.question}\n buttonVariant\n onSubmit={formik.handleSubmit}\n name=\"question\"\n min={questionMinimum}\n max={300}\n onChange={(e) => {\n const fieldKey = \"question\";\n formik.setFieldError(fieldKey, null);\n storeFieldForReload(fieldKey, e.target.value);\n formik.setFieldValue(fieldKey, e.target.value);\n }}\n // eslint-disable-next-line max-len\n placeholder={!disableFields ? \"Write your question...\" : \"\"}\n value={formik.values.question}\n />\n </div>\n </div>\n </div>\n </form>\n )}\n </Formik>\n );\n};\n\nInContentAIForm.propTypes = {\n loading: PropTypes.bool,\n locked: PropTypes.bool,\n onResourceChange: PropTypes.func,\n onSubmit: PropTypes.func,\n options: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string,\n value: PropTypes.string,\n })\n ),\n questionMinimum: PropTypes.number,\n quotaRemaining: PropTypes.number.isRequired,\n resetText: PropTypes.string,\n signupPath: PropTypes.string,\n values: PropTypes.object,\n};\n\nInContentAIForm.defaultProps = {\n loading: false,\n locked: false,\n onResourceChange: () => {},\n onSubmit: () => {},\n options: [],\n questionMinimum: 25,\n resetText: \"\",\n signupPath: \"/sign-up?focus=teacher\",\n values: {},\n};\n\nexport default InContentAIForm;\n","import React, { useEffect, useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport InContentAIForm from \"components/ai_tools/InContentAIForm\";\nimport ChatArea from \"components/ai_tools/ChatArea\";\nimport pluralize from \"pluralize\";\nimport fetch from \"lib/shared/fetch\";\n\nimport {\n AI_TOOL_CHANNELS,\n AI_TOOL_NAMES,\n QUESTION_MINIMUM_LENGTH,\n} from \"./constants\";\nimport useChatMessages from \"./hooks/useChatMessages\";\n\nconst InContentAskLitchartsAI = (props) => {\n const {\n aiAnswersCompletePath,\n guidesPath,\n inPoetry,\n locked,\n options: optionsFromProps,\n quotaRemaining: quotaFromProps,\n resetDate,\n resource,\n signupPath,\n submissionPath,\n } = props;\n const [options, setOptions] = useState(optionsFromProps);\n const [resourceTitle, setResourceTitle] = useState(() => {\n return options.find((option) => option.value === resource)?.title;\n });\n const { loading, quotaRemaining, messages, prevSlug, handleAskAIFormSubmit } =\n useChatMessages(\n {\n aiAnswersCompletePath,\n channel: AI_TOOL_CHANNELS.ASK_AI,\n eventCategory: \"Ask LitCharts AI on Content Pages\",\n inContent: true,\n inPoetry,\n locked,\n quotaFromProps,\n resourceTitle,\n signupPath,\n submissionPath,\n toolName: AI_TOOL_NAMES.ASK_AI,\n upgradeable: false,\n },\n [resourceTitle]\n );\n\n useEffect(() => {\n scrollToolIntoViewOnTap();\n fetchGuidesList();\n }, []);\n\n const handleResourceChange = (slug) => {\n const newResourceTitle = options.find(\n (option) => option.value === slug\n ).title;\n setResourceTitle(newResourceTitle);\n };\n\n const fetchGuidesList = () => {\n fetch(guidesPath, { cache: \"default\" })\n .then((response) => {\n if (response.ok) return response.json();\n if (response.status === 304) return response.json();\n\n throw new Error(`Error fetching dropdown content: ${response.status}`);\n })\n .then((data) => {\n // This is a hack :(\n // When we replace `options` and pass it down to the form, and thus react-select, the dropdown is re-populated,\n // however, it no longer has the correct option selected. I suspect it's because the value we initially pass in\n // is no longer in the options array (pass by reference?). So we replace the identical entry in the new options\n // list with the one already set up.\n const newOptions = data.guides;\n const indexToReplace = newOptions.findIndex(\n (guide) => guide.value === options.at(0).value\n );\n newOptions[indexToReplace] = options.at(0);\n\n setOptions(newOptions);\n })\n .catch((error) => {\n console.error(\"Error fetching dropdown content:\", error);\n });\n };\n\n const scrollToolIntoViewOnTap = () => {\n // Scrolls AI tool into view when header or body are tapped.\n const $scrollTarget = $(\".ask-litcharts-ai--in-content-container\");\n const $tapTarget = $(\".ai-form--header, .chat-area--container\");\n let offset;\n\n function scrollToTop(event) {\n if ($(event.target).is(\"a\")) {\n return true;\n }\n\n let windowOffset = 120;\n if (inPoetry) {\n const $toolContainer = $(\"#poems-show__guide__ai-tool__container\");\n windowOffset = $toolContainer.data().topOffset;\n }\n\n if (isSmallWindow()) {\n offset = $(\".context-switch-banner:visible\").offset().top;\n } else {\n offset = $scrollTarget.offset().top - windowOffset;\n }\n\n window.scrollTo({\n top: offset,\n behavior: \"smooth\",\n });\n }\n\n $tapTarget.on(\"click\", scrollToTop);\n };\n\n const isSmallWindow = () => {\n return $(\".context-switch-banner:visible\").length;\n };\n\n const resetText = `${pluralize(\n \"answers\",\n quotaRemaining,\n true\n )} left (resets on ${resetDate})`;\n\n return (\n <div className=\"ask-litcharts-ai--in-content-container\">\n <div className=\"ai-form--header body-1\">Ask LitCharts AI</div>\n <ChatArea messages={messages} />\n {resetDate && quotaRemaining === 0 ? (\n <div className=\"ask-litcharts-ai--quota-remaining subtitle-2\">\n <span>{resetText}</span>\n </div>\n ) : (\n <InContentAIForm\n {...props}\n loading={loading}\n onResourceChange={handleResourceChange}\n onSubmit={handleAskAIFormSubmit}\n options={options}\n // Note, please read before removing:\n // This line causes a re-render that clears out the \"Question\" field.\n key={`quota-remaining-${quotaRemaining}`}\n resetText={resetText}\n quotaRemaining={quotaRemaining}\n questionMinimum={QUESTION_MINIMUM_LENGTH}\n values={{ title: prevSlug || resource }}\n />\n )}\n </div>\n );\n};\n\nInContentAskLitchartsAI.propTypes = {\n aiAnswersCompletePath: PropTypes.string,\n guidesPath: PropTypes.string,\n inPoetry: PropTypes.bool,\n locked: PropTypes.bool,\n options: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string,\n value: PropTypes.string,\n label: PropTypes.string,\n title: PropTypes.string,\n })\n ),\n questionMinimum: PropTypes.number,\n quotaRemaining: PropTypes.number.isRequired,\n resetDate: PropTypes.string,\n resource: PropTypes.string,\n signupPath: PropTypes.string,\n submissionPath: PropTypes.string,\n};\n\nInContentAskLitchartsAI.defaultProps = {\n aiAnswersCompletePath: \"/ai_answers/complete\",\n guidesPath: \"/ai/guides\",\n inPoetry: false,\n locked: false,\n options: [],\n questionMinimum: 25,\n resetDate: \"\",\n resource: null,\n signupPath: \"/sign-up?focus=teacher\",\n submissionPath: \"/ai/ask-litcharts-ai\",\n};\n\nexport default InContentAskLitchartsAI;\n","import React, { useState, useEffect } from \"react\";\nimport PropTypes from \"prop-types\";\nimport Select from \"components/shared/Select\";\nimport ChatArea from \"components/ai_tools/ChatArea\";\nimport { useFormik } from \"formik\";\nimport * as Yup from \"yup\";\nimport pluralize from \"pluralize\";\nimport AIToolsLayout from \"./layout/AIToolsLayout\";\nimport {\n AI_TOOL_CHANNELS,\n AI_TOOL_NAMES,\n AI_TOOLS_LABEL_MAP,\n AI_TOOLS_LOADING_DEFAULTS,\n REUSABLES,\n} from \"./constants\";\nimport useChatMessages from \"./hooks/useChatMessages\";\nimport AIFormLayout from \"./shared/AIForm/AIFormLayout\";\nimport useFormDisableFields from \"./hooks/useFormDisableFields\";\nimport useWindowResizeAndFormCollapse from \"./hooks/useWindowResizeAndFormCollapse\";\n\nconst QuizQuestions = (props) => {\n const {\n quotaRemaining: quotaFromProps,\n locked,\n upgradeable,\n signupPath,\n submissionPath,\n aiAnswersCompletePath,\n options,\n } = props;\n\n const validationSchema = Yup.object().shape({\n title: Yup.string().required(\"Please select your title\"),\n topic: Yup.string().when(\"title\", (title) => {\n if (title) {\n return Yup.string().required(\"Please select your topic\");\n }\n }),\n subtopic: Yup.string().when(\"topic\", (_) => {\n if (selectedTopic?.data) {\n return Yup.string().required(\n `Please select your ${\n AI_TOOLS_LABEL_MAP[selectedTopic.label] ??\n selectedTopic.labelText?.toLowerCase()\n }`\n );\n }\n }),\n });\n\n const [loadingTopics, setLoadingTopics] = useState(false);\n const [topics, setTopics] = useState();\n const [selectedTopic, setSelectedTopic] = useState();\n const [selectedSubtopic, setSelectedSubtopic] = useState();\n const { isLessThanSmallBreakpoint, collapsed, setCollapsed } =\n useWindowResizeAndFormCollapse();\n\n const formik = useFormik({\n initialValues: {\n title: prevSlug || \"\",\n topic: \"\",\n subtopic: \"\",\n },\n validateOnChange: false,\n validateOnBlur: false,\n validationSchema,\n onSubmit: (values) => {\n validationSchema\n .validate(values, { abortEarly: false })\n .then(() => {\n handleQuizDiscussionEssayPrompt(values);\n if (isLessThanSmallBreakpoint) {\n setCollapsed(true);\n }\n })\n .catch((errors) => {\n formik.setErrors(errors);\n });\n },\n });\n\n const {\n loading,\n quotaRemaining,\n messages,\n prevSlug,\n handleQuizDiscussionEssayPrompt,\n } = useChatMessages({\n submissionPath,\n aiAnswersCompletePath,\n locked,\n upgradeable,\n signupPath,\n quotaFromProps,\n toolName: AI_TOOL_NAMES.QUIZ_QUESTIONS,\n eventCategory: \"Quiz Questions Generator\",\n channel: AI_TOOL_CHANNELS.QUIZ_QUESTIONS,\n messageText: selectedSubtopic?.messageText ?? selectedTopic?.messageText,\n formik,\n });\n\n const { disableFields } = useFormDisableFields(locked, quotaRemaining);\n\n const handleError = (timeoutRef) => {\n clearTimeout(timeoutRef);\n setLoadingTopics(false);\n setTopics([]);\n formik.setFieldError(\"topic\", \"Data request failed. Please try again.\");\n };\n\n const fetchDropdownContent = (guidePath) => {\n setTopics();\n setSelectedTopic(null);\n setSelectedSubtopic(null);\n const loadingTimeout = setTimeout(() => {\n setTopics([]);\n setLoadingTopics(true);\n }, 1000);\n\n fetch(guidePath, {\n method: \"GET\",\n })\n .then((response) => {\n if (!response.ok) {\n handleError(loadingTimeout);\n } else {\n return response.json();\n }\n })\n .then((data) => {\n clearTimeout(loadingTimeout);\n setTopics(data.topics);\n setLoadingTopics(false);\n })\n .catch((error) => {\n handleError(loadingTimeout);\n console.error(\"Error fetching dropdown content:\", error);\n });\n };\n\n useEffect(() => {\n formik.setFieldValue(\"title\", prevSlug);\n }, [prevSlug]);\n\n return (\n <AIToolsLayout>\n <AIFormLayout\n {...props}\n collapsed={collapsed}\n isLessThanSmallBreakpoint={isLessThanSmallBreakpoint}\n setCollapsed={setCollapsed}\n toolName={AI_TOOL_NAMES.QUIZ_QUESTIONS}\n loading={loading}\n storageKey=\"quizQuestions\"\n quotaRemaining={quotaRemaining}\n formik={formik}\n >\n <Select\n errorMessage={formik.errors.title}\n id={REUSABLES.TITLE}\n isDisabled={loading || disableFields}\n isSearchable\n labelText=\"Title\"\n name={REUSABLES.TITLE}\n options={options}\n placeholder={!disableFields ? \"e.g. Hamlet (Shakespeare)\" : \"\"}\n onChange={(e) => {\n formik.setFieldValue(REUSABLES.TITLE, e.value);\n formik.setFieldValue(REUSABLES.TOPIC, undefined);\n formik.setFieldValue(REUSABLES.SUBTOPIC, undefined);\n formik.setFieldError(REUSABLES.TOPIC, undefined);\n formik.setFieldError(REUSABLES.SUBTOPIC, undefined);\n fetchDropdownContent(e.guide_path);\n }}\n value={formik.values.title}\n />\n {topics && !disableFields && (\n <Select\n errorMessage={\n loadingTopics && formik.errors.topic\n ? \"Loading, select one when complete\"\n : formik.errors.topic\n }\n id={REUSABLES.TOPIC}\n isDisabled={loadingTopics || loading || disableFields}\n isSearchable\n isControlled\n isLoading={loadingTopics}\n labelText=\"Topic\"\n name={REUSABLES.TOPIC}\n options={loadingTopics ? [AI_TOOLS_LOADING_DEFAULTS] : topics}\n placeholder={!disableFields ? \"e.g. Themes\" : \"\"}\n onChange={(e) => {\n formik.setFieldValue(REUSABLES.TOPIC, e.value);\n formik.setFieldValue(REUSABLES.SUBTOPIC, undefined);\n formik.setFieldError(REUSABLES.SUBTOPIC, undefined);\n\n setSelectedTopic(topics.find((topic) => topic.value === e.value));\n setSelectedSubtopic(null);\n }}\n value={\n loadingTopics\n ? AI_TOOLS_LOADING_DEFAULTS.value\n : formik.values.topic\n }\n />\n )}\n {selectedTopic?.data && !disableFields && (\n <Select\n errorMessage={formik.errors.subtopic}\n id={REUSABLES.SUBTOPIC}\n isDisabled={loading || disableFields}\n isSearchable\n isControlled\n labelText={\n selectedTopic.labelText ??\n pluralize(formik.values.topic, 1, false)\n }\n name={REUSABLES.SUBTOPIC}\n options={selectedTopic.data}\n placeholder={!disableFields ? \"Select one\" : \"\"}\n onChange={(e) => {\n formik.setFieldValue(REUSABLES.SUBTOPIC, e.value);\n setSelectedSubtopic(\n selectedTopic.data.find((topic) => topic.value === e.value)\n );\n }}\n value={formik.values.subtopic}\n />\n )}\n </AIFormLayout>\n <ChatArea messages={messages} />\n </AIToolsLayout>\n );\n};\n\nQuizQuestions.propTypes = {\n submissionPath: PropTypes.string,\n aiAnswersCompletePath: PropTypes.string,\n locked: PropTypes.bool,\n upgradeable: PropTypes.bool,\n options: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string,\n value: PropTypes.string,\n })\n ),\n questionMinimum: PropTypes.number,\n quotaRemaining: PropTypes.number.isRequired,\n resetDate: PropTypes.string,\n signupPath: PropTypes.string,\n};\n\nQuizQuestions.defaultProps = {\n submissionPath: \"/ai/quiz-question-generator\",\n aiAnswersCompletePath: \"/ai_answers/complete\",\n locked: false,\n upgradeable: false,\n options: [],\n questionMinimum: 25,\n resetDate: \"\",\n signupPath: \"/sign-up?focus=teacher\",\n};\n\nexport default QuizQuestions;\n","export const AI_ANSWERS_QUOTA = 250;\nexport const QUESTION_MINIMUM_LENGTH = 25;\nexport const AI_TOOLS_ERROR_MESSAGES = {\n ESSAY_PROMPTS:\n \"Oops. Something went wrong. This response wasn't counted. Feel free to try again.\",\n QUIZ_QUESTIONS:\n \"Oops. Something went wrong. This response wasn't counted. Feel free to try again.\",\n DISCUSSION_QUESTIONS:\n \"Oops. Something went wrong. This response wasn't counted. Feel free to try again.\",\n ASK_AI:\n \"Oops. Something went wrong. Your remaining number of answers has not been reduced. Feel free to try again.\",\n};\n\nexport const AI_TOOL_CHANNELS = {\n ESSAY_PROMPTS: \"EssayPromptsChannel\",\n DISCUSSION_QUESTIONS: \"DiscussionQuestionsChannel\",\n QUIZ_QUESTIONS: \"QuizQuestionsChannel\",\n ASK_AI: \"AskAiChannel\",\n};\n\nexport const AI_TOOL_NAMES = {\n ESSAY_PROMPTS: \"ESSAY_PROMPTS\",\n DISCUSSION_QUESTIONS: \"DISCUSSION_QUESTIONS\",\n QUIZ_QUESTIONS: \"QUIZ_QUESTIONS\",\n ASK_AI: \"ASK_AI\",\n};\n\nexport const REUSABLES = {\n TITLE: \"title\",\n TOPIC: \"topic\",\n SUBTOPIC: \"subtopic\",\n};\n\nexport const AI_TOOLS_LABEL_MAP = {\n Characters: \"character\",\n Symbols: \"symbol\",\n Themes: \"theme\",\n \"Line-by-Line Analysis\": \"lines\",\n \"Poetic Devices\": \"poetic device\",\n};\n\nexport const AMPLITUDE_BANNER_DATA_ATTRIBUTES = {\n [AI_TOOL_NAMES.DISCUSSION_QUESTIONS]: \"discussionQuestionGeneratorBanner\",\n [AI_TOOL_NAMES.QUIZ_QUESTIONS]: \"quizQuestionGeneratorBanner\",\n [AI_TOOL_NAMES.ESSAY_PROMPTS]: \"essayPromptGeneratorBanner\",\n [AI_TOOL_NAMES.ASK_AI]: \"aiSignupBanner\",\n};\n\nexport const AMPLITUDE_QUESTION_ASKED_LARGE_ATTRIBUTES = {\n [AI_TOOL_NAMES.DISCUSSION_QUESTIONS]: \"discussionQuestionAskedLarge\",\n [AI_TOOL_NAMES.QUIZ_QUESTIONS]: \"quizQuestionAskedLarge\",\n [AI_TOOL_NAMES.ESSAY_PROMPTS]: \"essayPromptAskedLarge\",\n [AI_TOOL_NAMES.ASK_AI]: \"aiQuestionAskedLarge\",\n};\n\nexport const AMPLITUDE_QUESTION_ASKED_SMALL_ATTRIBUTES = {\n [AI_TOOL_NAMES.DISCUSSION_QUESTIONS]: \"discussionQuestionAskedSmall\",\n [AI_TOOL_NAMES.QUIZ_QUESTIONS]: \"quizQuestionAskedSmall\",\n [AI_TOOL_NAMES.ESSAY_PROMPTS]: \"essayPromptAskedSmall\",\n [AI_TOOL_NAMES.ASK_AI]: \"aiQuestionAskedSmall\",\n};\n\nexport const AMPLITUDE_QUESTION_ASKED_SMALL_COLLAPSED_ATTRIBUTES = {\n [AI_TOOL_NAMES.DISCUSSION_QUESTIONS]: \"discussionQuestionAskedSmallCollapsed\",\n [AI_TOOL_NAMES.QUIZ_QUESTIONS]: \"quizQuestionAskedSmallCollapsed\",\n [AI_TOOL_NAMES.ESSAY_PROMPTS]: \"essayPromptAskedSmallCollapsed\",\n [AI_TOOL_NAMES.ASK_AI]: \"aiQuestionAskedSmallCollapsed\",\n};\n\nexport const AMPLITUDE_SIGNUP_INTRO_CHAT_ATTRIBUTES = {\n [AI_TOOL_NAMES.DISCUSSION_QUESTIONS]: \"discussionQuestionSignupIntroChat\",\n [AI_TOOL_NAMES.QUIZ_QUESTIONS]: \"quizQuestionSignupIntroChat\",\n [AI_TOOL_NAMES.ESSAY_PROMPTS]: \"essayPromptSignupIntroChat\",\n [AI_TOOL_NAMES.ASK_AI]: \"aiSignupIntroChat\",\n};\n\nexport const AMPLITUDE_SIGNUP_FORM_LARGE_ATTRIBUTES = {\n [AI_TOOL_NAMES.DISCUSSION_QUESTIONS]: \"discussionQuestionSignupFormLarge\",\n [AI_TOOL_NAMES.QUIZ_QUESTIONS]: \"quizQuestionSignupFormLarge\",\n [AI_TOOL_NAMES.ESSAY_PROMPTS]: \"essayPromptSignupFormLarge\",\n [AI_TOOL_NAMES.ASK_AI]: \"aiSignupFormLarge\",\n};\n\nexport const AMPLITUDE_SIGNUP_FORM_SMALL_COLLAPSED_ATTRIBUTES = {\n [AI_TOOL_NAMES.DISCUSSION_QUESTIONS]:\n \"discussionQuestionSignupFormSmallCollapsed\",\n [AI_TOOL_NAMES.QUIZ_QUESTIONS]: \"quizQuestionSignupFormSmallCollapsed\",\n [AI_TOOL_NAMES.ESSAY_PROMPTS]: \"essayPromptSignupFormSmallCollapsed\",\n [AI_TOOL_NAMES.ASK_AI]: \"aiSignupFormSmallCollapsed\",\n};\n\nexport const AI_TOOLS_LOADING_DEFAULTS = { label: \"Loading...\", value: \"1\" };\n","import React, { useState, useEffect, useRef } from \"react\";\nimport consumer from \"channels/consumer\";\nimport ReactHtmlParser from \"react-html-parser\";\nimport {\n serverBubbleConfig,\n userBubbleConfig,\n DEFAULT_STATE,\n LOADING_STATE,\n STREAMING_STATE,\n} from \"components/ai_tools/ChatBubble\";\nimport fetch from \"lib/shared/fetch\";\nimport { logAiEvent } from \"lib/shared/events\";\nimport { findIndex } from \"lodash\";\nimport { AI_TOOLS_ERROR_MESSAGES } from \"../constants\";\nimport CopyAndSaveReminder from \"../shared/ChatArea/CopyAndSaveReminder\";\nimport InitialMessage from \"../shared/ChatArea/InitialMessage\";\n\nconst useChatMessages = (props, dependencies = []) => {\n const {\n aiAnswersCompletePath,\n channel,\n eventCategory,\n inContent,\n locked,\n messageText,\n quotaFromProps,\n resourceTitle,\n signupPath,\n submissionPath,\n toolName,\n upgradeable,\n } = props;\n // The order matters for these state initializers\n const [loading, setLoading] = useState(false);\n const [quotaRemaining, setQuotaRemaining] = useState(quotaFromProps);\n const [messages, setMessages] = useState([]);\n const [prevSlug, setPrevSlug] = useState();\n const messagesCallbacks = useRef([]);\n\n const handleError = () => {\n setMessages((prevMessages) => {\n const copyArray = [...prevMessages];\n const previousMessage = copyArray.pop();\n const updatedMessage = {\n ...previousMessage,\n children: AI_TOOLS_ERROR_MESSAGES[toolName],\n streamState: DEFAULT_STATE,\n };\n\n return [...copyArray, updatedMessage];\n });\n setLoading(false);\n };\n\n const handleRedirect = (json) => {\n if (json?.redirect_to) {\n window.location.replace(json.redirect_to);\n }\n };\n\n const handleAskAIFormSubmit = ({ question, title: slug }) => {\n setLoading(true);\n messagesCallbacks.current.push(() => {\n setMessages((prevMessages) => {\n const newServerMessage = serverBubbleConfig({\n streamState: LOADING_STATE,\n });\n\n return [...prevMessages, newServerMessage];\n });\n });\n\n messagesCallbacks.current.push(() => {\n fetch(submissionPath, {\n method: \"POST\",\n body: JSON.stringify({\n resource: slug,\n question,\n }),\n })\n .then((response) => {\n if (!response.ok) {\n handleError();\n } else {\n return response.json();\n }\n })\n .then(handleRedirect)\n .catch(handleFetchError);\n });\n\n setPrevSlug(slug);\n setMessages((prevMessages) => {\n const newUserMessage = userBubbleConfig({ children: question });\n return [...prevMessages, newUserMessage];\n });\n };\n\n const handleQuizDiscussionEssayPrompt = ({\n topic,\n subtopic,\n title: slug,\n }) => {\n setLoading(true);\n messagesCallbacks.current.push(() => {\n setMessages((prevMessages) => {\n const newServerMessage = serverBubbleConfig({\n streamState: LOADING_STATE,\n });\n\n return [...prevMessages, newServerMessage];\n });\n });\n\n messagesCallbacks.current.push(() => {\n fetch(submissionPath, {\n method: \"POST\",\n body: JSON.stringify({\n resource: slug,\n topic,\n subtopic,\n }),\n })\n .then((response) => {\n // we're logged out somehow, like in another tab\n if (response.status === 401) {\n window.location.href = signupPath;\n return;\n }\n\n if (!response.ok) {\n handleError();\n } else {\n return response.json();\n }\n })\n .then(handleRedirect)\n .catch(handleFetchError);\n });\n\n setPrevSlug(slug);\n setMessages((prevMessages) => {\n const newUserMessage = userBubbleConfig({\n children: ReactHtmlParser(messageText),\n });\n return [...prevMessages, newUserMessage];\n });\n };\n\n const handleBroadcastReceived = (data) => {\n if (data.stop) {\n setLoading(false);\n setMessages((prevMessages) => {\n const copyArray = [...prevMessages];\n const previousMessageIndex = findIndex(copyArray, {\n aiAnswerId: data.ai_answer_id,\n });\n\n // We need this here to prevent the case of a user having two browsers/windows open with the same tool\n // and having the data stream to both windows. Previously, we were adding the <CopyAndSaveReminder />\n // to both windows even though only one sent the message. This makes sure to only handle the window in\n // which the message came from.\n if (previousMessageIndex !== -1) {\n copyArray[previousMessageIndex].children = ReactHtmlParser(data.body);\n copyArray[previousMessageIndex].streamState = DEFAULT_STATE;\n messagesCallbacks.current.push(() => {\n const reminderMessage = serverBubbleConfig({\n children: <CopyAndSaveReminder />,\n });\n\n setMessages((prevMsgs) => [...prevMsgs, reminderMessage]);\n });\n }\n\n return copyArray;\n });\n setQuotaRemaining((prev) => prev - 1);\n\n if (data.ai_answer_id) {\n fetch(aiAnswersCompletePath, {\n method: \"POST\",\n body: JSON.stringify({\n ai_answer_id: data.ai_answer_id,\n }),\n })\n .then((response) => {\n if (!response.ok) {\n handleError();\n }\n })\n .catch(handleFetchError);\n }\n logAiEvent(\"AI Response Completed\", eventCategory);\n } else if (data.error) {\n handleError();\n } else {\n setMessages((prevMessages) => {\n const copyArray = [...prevMessages];\n\n let previousMessageIndex = findIndex(copyArray, {\n aiAnswerId: data.ai_answer_id,\n });\n\n if (previousMessageIndex === -1) {\n previousMessageIndex = copyArray.length - 1;\n }\n\n const previousMessage = copyArray[previousMessageIndex];\n\n // Previous answer already completed with stop signal, do nothing\n if (\n previousMessageIndex !== -1 &&\n previousMessage.streamState === DEFAULT_STATE\n ) {\n return prevMessages;\n }\n\n if (previousMessage.streamState === LOADING_STATE) {\n logAiEvent(\"AI Response Started\", eventCategory);\n }\n\n const updatedMessage = {\n ...previousMessage,\n streamState: STREAMING_STATE,\n aiAnswerId: data.ai_answer_id,\n children: ReactHtmlParser(data.body),\n slideUp: false,\n };\n\n copyArray.splice(previousMessageIndex, 1, updatedMessage);\n\n return copyArray;\n });\n }\n };\n\n useEffect(() => {\n if (messages.length > 1) return;\n\n const initialMessage = serverBubbleConfig({\n children: (\n <InitialMessage\n toolName={toolName}\n locked={locked}\n inContent={inContent}\n resourceTitle={resourceTitle}\n upgradeable={upgradeable}\n quotaRemaining={quotaRemaining}\n signupPath={signupPath}\n />\n ),\n slideUp: false,\n });\n\n setMessages([initialMessage]);\n }, dependencies);\n\n useEffect(() => {\n if (locked) return;\n // Connect to the channel\n consumer.subscriptions.create(\n {\n channel,\n },\n {\n connected: () => console.log(\"connected\"),\n disconnected: () => console.log(\"disconnected\"),\n received: handleBroadcastReceived,\n }\n );\n\n return () => {\n consumer.disconnect();\n };\n }, []);\n\n useEffect(() => {\n messagesCallbacks.current.forEach((callback) => {\n setTimeout(callback, 500);\n });\n messagesCallbacks.current = [];\n }, [messages]);\n\n const handleFetchError = () => {\n // This block is executed if there is a network error or if the request fails\n // The catch block captures exceptions thrown during the fetch operation,\n // which could occur if the client is offline or if there are network connectivity issues.\n handleError();\n };\n\n return {\n loading,\n quotaRemaining,\n messages,\n prevSlug,\n handleAskAIFormSubmit,\n handleQuizDiscussionEssayPrompt,\n };\n};\n\nexport default useChatMessages;\n","const useFormDisableFields = (locked, quotaRemaining) => {\n const disableFields = !locked && quotaRemaining === 0;\n return { disableFields };\n};\n\nexport default useFormDisableFields;\n","import { useState, useEffect } from \"react\";\nimport pluralize from \"pluralize\";\nimport { AI_TOOL_NAMES } from \"../constants\";\n\nconst useFormText = (\n toolName,\n locked,\n quotaRemaining,\n collapsed,\n isLessThanSmallBreakpoint,\n resetDate\n) => {\n const [buttonText, setButtonText] = useState(\"\");\n const [resetText, setResetText] = useState(\"\");\n const [submittingButtonText, setsubmittingButtonText] = useState(\"\");\n\n let buttonRemainingText = \"\";\n let buttonCTA = \"\";\n\n useEffect(() => {\n switch (toolName) {\n case AI_TOOL_NAMES.QUIZ_QUESTIONS:\n case AI_TOOL_NAMES.DISCUSSION_QUESTIONS:\n buttonRemainingText =\n !locked && quotaRemaining > 0\n ? ` (${pluralize(\"use\", quotaRemaining, true)} left)`\n : \"\";\n buttonCTA = \"Generate Questions\";\n if (quotaRemaining > 0 && !collapsed && isLessThanSmallBreakpoint) {\n buttonCTA = \"Submit\";\n }\n setResetText(\n `${pluralize(\n \"use\",\n quotaRemaining,\n true\n )} of this tool left (resets on ${resetDate})`\n );\n setsubmittingButtonText(\"Generating...\");\n\n break;\n case AI_TOOL_NAMES.ESSAY_PROMPTS:\n buttonRemainingText =\n !locked && quotaRemaining > 0\n ? ` (${pluralize(\"use\", quotaRemaining, true)} left)`\n : \"\";\n buttonCTA = \"Generate Prompts\";\n if (quotaRemaining > 0 && !collapsed && isLessThanSmallBreakpoint) {\n buttonCTA = \"Submit\";\n }\n setResetText(\n `${pluralize(\n \"use\",\n quotaRemaining,\n true\n )} of this tool left (resets on ${resetDate})`\n );\n setsubmittingButtonText(\"Generating...\");\n\n break;\n case AI_TOOL_NAMES.ASK_AI:\n buttonRemainingText =\n !locked && quotaRemaining > 0 ? ` (${quotaRemaining} left)` : \"\";\n buttonCTA = \"Ask LitCharts AI\";\n if (quotaRemaining > 0 && !collapsed && isLessThanSmallBreakpoint) {\n buttonCTA = \"Submit\";\n } else if (quotaRemaining > 0 && quotaRemaining < 25) {\n buttonCTA = \"Ask New Question\";\n }\n setResetText(\n `${pluralize(\n \"answer\",\n quotaRemaining,\n true\n )} left (resets on ${resetDate})`\n );\n setsubmittingButtonText(\"Answering...\");\n break;\n default:\n setButtonText(\"\");\n setResetText(\"\");\n return;\n }\n\n setButtonText(buttonCTA + buttonRemainingText);\n }, [\n toolName,\n locked,\n quotaRemaining,\n collapsed,\n isLessThanSmallBreakpoint,\n resetDate,\n ]);\n\n return { submittingButtonText, buttonText, resetText };\n};\n\nexport default useFormText;\n","const useSessionStorage = (sessionStorageKey, locked, disableFields) => {\n const unpackValueFromStorage = (key) => {\n const storageKey = `${sessionStorageKey}:${key}`;\n const storedValue = sessionStorage.getItem(storageKey) || \"\";\n sessionStorage.removeItem(storageKey);\n return storedValue;\n };\n\n const storeFieldForReload = (key, value) => {\n if (locked && !disableFields) {\n const storageKey = `${sessionStorageKey}:${key}`;\n sessionStorage.setItem(storageKey, value);\n }\n };\n\n return [unpackValueFromStorage, storeFieldForReload];\n};\n\nexport default useSessionStorage;\n","import { useState, useEffect, useLayoutEffect } from \"react\";\nimport { SM_PIXEL_MIN, XS_PIXEL_MAX } from \"constants/breakpoints\";\n\nconst useWindowResizeAndFormCollapse = () => {\n const [isLessThanSmallBreakpoint, setIsLessThanSmallBreakpoint] =\n useState(true);\n const [collapsed, setCollapsed] = useState(true);\n\n const resizeHandler = () => {\n if (window.matchMedia(`(min-width: ${SM_PIXEL_MIN}px)`).matches) {\n setIsLessThanSmallBreakpoint(false);\n } else if (window.matchMedia(`(max-width: ${XS_PIXEL_MAX}px)`).matches) {\n setIsLessThanSmallBreakpoint(true);\n }\n };\n\n useEffect(() => {\n resizeHandler();\n window.addEventListener(\"resize\", resizeHandler);\n return () => {\n window.removeEventListener(\"resize\", resizeHandler);\n };\n }, []);\n\n useEffect(() => {\n // Prevent the body from scrolling underneath the form field when on small screen\n // and expanded\n if (!collapsed && isLessThanSmallBreakpoint) {\n document.body.style.overflow = \"hidden\";\n } else {\n document.body.style.overflow = \"auto\";\n }\n }, [collapsed, isLessThanSmallBreakpoint]);\n\n useLayoutEffect(() => {\n setCollapsed(isLessThanSmallBreakpoint);\n }, [isLessThanSmallBreakpoint]);\n\n return { isLessThanSmallBreakpoint, setCollapsed, collapsed };\n};\n\nexport default useWindowResizeAndFormCollapse;\n","import React, { useLayoutEffect, useRef } from \"react\";\n\n// Note: The props should consist of 2 children\n// Left Pane Child: This will be the form\n// Right Pane Child: This is the chat area\n// See AskLitchartsAI.jsx to see this in use.\n\nconst AIToolsLayout = (props) => {\n const layoutRef = useRef();\n const resizeHandler = () => {\n const layoutBanner = document.querySelector(\"body > .lc-banner\");\n const panelBanner = document.querySelector(\"#panel > .lc-banner\");\n const promoBanner = document.querySelector(\"#sticky-mobile-header-promo\");\n const header = document.querySelector(\".header\");\n const layoutBannerHeight = layoutBanner?.offsetHeight || 0;\n const panelBannerHeight = panelBanner?.offsetHeight || 0;\n const promoBannerHeight = promoBanner?.offsetHeight || 0;\n const headerHeight = header.offsetHeight;\n\n const offset =\n headerHeight + layoutBannerHeight + panelBannerHeight + promoBannerHeight;\n\n layoutRef.current.style.height = `calc(100dvh - ${offset}px)`;\n };\n useLayoutEffect(() => {\n resizeHandler();\n\n window.addEventListener(\"resize\", resizeHandler);\n return () => {\n window.removeEventListener(\"resize\", resizeHandler);\n };\n }, []);\n return (\n <div className=\"ai-tools--layout\" ref={layoutRef}>\n <div className=\"ask-litcharts-ai--container\">\n <div className=\"ask-litcharts-ai--form\">{props.children[0]}</div>\n <div className=\"ask-litcharts-ai--chat_area\">{props.children[1]}</div>\n </div>\n </div>\n );\n};\n\nexport default AIToolsLayout;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport classnames from \"classnames\";\nimport IconButton from \"components/shared/IconButton\";\nimport useFormDisableFields from \"../../hooks/useFormDisableFields\";\nimport useFormText from \"../../hooks/useFormText\";\nimport {\n AI_TOOL_NAMES,\n AMPLITUDE_QUESTION_ASKED_LARGE_ATTRIBUTES,\n AMPLITUDE_QUESTION_ASKED_SMALL_ATTRIBUTES,\n AMPLITUDE_QUESTION_ASKED_SMALL_COLLAPSED_ATTRIBUTES,\n AMPLITUDE_SIGNUP_FORM_LARGE_ATTRIBUTES,\n AMPLITUDE_SIGNUP_FORM_SMALL_COLLAPSED_ATTRIBUTES,\n} from \"../../constants\";\nimport AIFormTitle from \"./AIFormTitle\";\nimport LockedInformationBanner from \"./LockedInformationBanner\";\nimport AIFormSubheading from \"./AIFormSubheading\";\nimport DisclaimerText from \"./DisclaimerText\";\n\nconst AIFormLayout = (props) => {\n const {\n loading,\n locked,\n quotaRemaining,\n resetDate,\n signupPath,\n toolName,\n formik,\n isLessThanSmallBreakpoint,\n collapsed,\n setCollapsed,\n children,\n } = props;\n\n const { disableFields } = useFormDisableFields(locked, quotaRemaining);\n const { buttonText, resetText, submittingButtonText } = useFormText(\n toolName,\n locked,\n quotaRemaining,\n collapsed,\n isLessThanSmallBreakpoint,\n resetDate\n );\n const showDisclaimerText = !collapsed || (collapsed && quotaRemaining === 0);\n\n const handleSubmit = (e) => {\n e.preventDefault();\n // Locked, redirect to sales page\n if (locked && !disableFields) {\n window.location.href = signupPath;\n return;\n }\n\n // We're in a collapsed state (smaller breakpoints)\n // Expand the form\n if (collapsed) {\n setCollapsed(false);\n return;\n }\n\n formik.handleSubmit();\n };\n\n const amplitudeSignupAttr = () => {\n if (locked && !disableFields) {\n if (isLessThanSmallBreakpoint) {\n return collapsed\n ? AMPLITUDE_SIGNUP_FORM_SMALL_COLLAPSED_ATTRIBUTES[toolName]\n : AMPLITUDE_SIGNUP_FORM_LARGE_ATTRIBUTES[toolName];\n }\n return AMPLITUDE_SIGNUP_FORM_LARGE_ATTRIBUTES[toolName];\n }\n if (isLessThanSmallBreakpoint) {\n return collapsed\n ? AMPLITUDE_QUESTION_ASKED_SMALL_COLLAPSED_ATTRIBUTES[toolName]\n : AMPLITUDE_QUESTION_ASKED_SMALL_ATTRIBUTES[toolName];\n }\n return AMPLITUDE_QUESTION_ASKED_LARGE_ATTRIBUTES[toolName];\n };\n\n return (\n <form\n onSubmit={handleSubmit}\n className={classnames(\"ai-form--container\", { collapsed })}\n >\n <div className=\"ai-form--header\">\n <AIFormTitle toolName={toolName} />\n <AIFormSubheading toolName={toolName} />\n <IconButton\n iconClass=\"lc-icon-close lc-icon-xs\"\n btnClass=\"btn-lg btn-borderless-alt\"\n onClick={() => setCollapsed(true)}\n />\n </div>\n <div className=\"ai-form--content\">\n <div className=\"ai-form--body\">\n <div\n className=\"ai-form--banner lc-banner lc-banner-information\"\n data-testid=\"ai-form-banner\"\n >\n {locked ? (\n <LockedInformationBanner\n toolName={toolName}\n signupPath={signupPath}\n />\n ) : (\n resetText\n )}\n </div>\n <div className=\"ai-form--fields\">{children}</div>\n </div>\n <div className=\"ai-form--footer\">\n <button\n className={`ai-form--submit btn btn-a-plus button-1 ${\n isLessThanSmallBreakpoint ? \"btn-lg\" : \"btn-block\"\n }`}\n data-testid=\"ai-form-submit\"\n data-amplitude={amplitudeSignupAttr()}\n disabled={disableFields || loading}\n type=\"submit\"\n >\n {locked && (\n <i\n className=\"lc-icon lc-icon-lock-filled lc-icon-sm\"\n data-testid=\"lock-icon\"\n />\n )}\n {loading ? submittingButtonText : buttonText}\n </button>\n {!locked && showDisclaimerText && (\n <div className=\"subtitle-1 tw-flex tw-pt-2 tw-text-gray-tint-40\">\n {collapsed && quotaRemaining === 0 && resetText}\n {!collapsed && (\n <DisclaimerText className=\"tw-self-center tw-text-center tw-flex-grow\" />\n )}\n </div>\n )}\n </div>\n </div>\n </form>\n );\n};\n\nAIFormLayout.propTypes = {\n formik: PropTypes.shape({\n handleSubmit: PropTypes.func.isRequired,\n values: PropTypes.object.isRequired,\n errors: PropTypes.object,\n touched: PropTypes.object,\n handleChange: PropTypes.func.isRequired,\n handleBlur: PropTypes.func.isRequired,\n isSubmitting: PropTypes.bool,\n }).isRequired,\n toolName: PropTypes.oneOf(Object.values(AI_TOOL_NAMES)).isRequired,\n loading: PropTypes.bool,\n locked: PropTypes.bool,\n quotaRemaining: PropTypes.number.isRequired,\n resetDate: PropTypes.string,\n signupPath: PropTypes.string,\n isLessThanSmallBreakpoint: PropTypes.bool.isRequired,\n collapsed: PropTypes.bool.isRequired,\n setCollapsed: PropTypes.func.isRequired,\n children: PropTypes.func.isRequired,\n};\n\nAIFormLayout.defaultProps = {\n loading: false,\n locked: false,\n resetDate: \"\",\n signupPath: \"/sign-up?focus=teacher\",\n};\n\nexport default AIFormLayout;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { AI_TOOL_NAMES } from \"../../constants\";\n\nconst AIFormSubheading = ({ toolName }) => {\n switch (toolName) {\n case AI_TOOL_NAMES.ASK_AI:\n return (\n <div className=\"subtitle-1\">\n The only tool that combines the world's best literary analysis\n with the power of AI.\n </div>\n );\n case AI_TOOL_NAMES.DISCUSSION_QUESTIONS:\n return (\n <div className=\"subtitle-1\">\n Instantly generate discussion questions by combining the world's\n best literary analysis with the power of AI.\n </div>\n );\n case AI_TOOL_NAMES.QUIZ_QUESTIONS:\n return (\n <div className=\"subtitle-1\">\n Instantly generate quiz questions by combining the world's best\n literary analysis with the power of AI.\n </div>\n );\n case AI_TOOL_NAMES.ESSAY_PROMPTS:\n return (\n <div className=\"subtitle-1\">\n Instantly generate essay prompts by combining the world's best\n literary analysis with the power of AI.\n </div>\n );\n default:\n return null;\n }\n};\n\nAIFormSubheading.propTypes = {\n toolName: PropTypes.oneOf(Object.values(AI_TOOL_NAMES)).isRequired,\n};\n\nexport default AIFormSubheading;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { AI_TOOL_NAMES } from \"../../constants\";\n\nconst AIFormTitle = ({ toolName }) => {\n switch (toolName) {\n case AI_TOOL_NAMES.ASK_AI:\n return <div className=\"title-5\">Ask LitCharts AI</div>;\n case AI_TOOL_NAMES.DISCUSSION_QUESTIONS:\n return <div className=\"title-5\">Discussion Question Generator</div>;\n case AI_TOOL_NAMES.QUIZ_QUESTIONS:\n return <div className=\"title-5\">Quiz Question Generator</div>;\n case AI_TOOL_NAMES.ESSAY_PROMPTS:\n return <div className=\"title-5\">Essay Prompt Generator</div>;\n default:\n return null;\n }\n};\n\nAIFormTitle.propTypes = {\n toolName: PropTypes.oneOf(Object.values(AI_TOOL_NAMES)).isRequired,\n};\n\nexport default AIFormTitle;\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { handleKeyPress } from \"components/shared/helpers/keyPressHelpers\";\nimport useClickOutsideElement from \"components/shared/hooks/useClickOutsideElement\";\n\nconst popoverText = \"AI responses may be inaccurate or inappropriate.\";\n\nconst popoverOptions = {\n container: \"body\",\n content: popoverText,\n html: true,\n placement: \"bottom\",\n template: `\n <div class=\"ai-disclaimer-popover popover tw-w-[198px] tw-bg-teal tw-border-0\" role=\"tooltip\">\n <div class=\"arrow !tw-border-b-teal after:!tw-border-b-teal\"></div>\n <div class=\"popover-body button-2 tw-text-white tw-py-1 tw-px-2\">\n ${popoverText}\n </div>\n </div>\n `,\n toggle: \"popover\",\n trigger: \"manual\",\n};\n\nexport default function DisclaimerText({ className = \"\" }) {\n const [tooltipActive, setTooltipActive] = useState(false);\n const tooltipRef = useRef();\n const touchEventRef = useRef(false);\n\n // For whatever reason, iOS is triggering both mouseenter and click events\n // when tapping. This is used at the start of the event to determine if we\n // need to skip the mouseenter event\n const setTouchActive = () => {\n touchEventRef.current = true;\n };\n\n const dismissPopover = () => {\n $(tooltipRef.current).popover(\"hide\");\n };\n\n const showPopover = () => {\n $(tooltipRef.current).popover(\"show\");\n };\n const handleKeyDown = (event) => {\n handleKeyPress(event, () => setTooltipActive(!tooltipActive));\n };\n\n // Setup the popover\n useEffect(() => {\n $(tooltipRef.current).popover(popoverOptions);\n }, []);\n\n // Use state to control tooltip appearance\n useEffect(() => {\n if (tooltipActive) {\n showPopover();\n } else {\n dismissPopover();\n }\n }, [tooltipActive]);\n\n // Dismiss popover on window resize\n useEffect(() => {\n window.addEventListener(\"resize\", dismissPopover);\n\n return () => {\n window.removeEventListener(\"resize\", dismissPopover);\n };\n }, []);\n\n useClickOutsideElement(tooltipRef, dismissPopover);\n\n return (\n <span className={className}>\n Generated by{\" \"}\n <span\n className=\"tw-underline tw-cursor-pointer focus-visible:tw-outline-teal\"\n onMouseEnter={() => setTooltipActive(!touchEventRef.current)}\n onMouseLeave={() => setTooltipActive(false)}\n onClick={() => setTooltipActive(!tooltipActive)}\n onKeyDown={handleKeyDown}\n onTouchStart={setTouchActive}\n ref={tooltipRef}\n role=\"button\"\n tabIndex={0}\n >\n AI\n </span>{\" \"}\n using LitCharts content.\n </span>\n );\n}\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport {\n AI_TOOL_NAMES,\n AMPLITUDE_BANNER_DATA_ATTRIBUTES,\n AI_ANSWERS_QUOTA,\n} from \"../../constants\";\n\nconst LockedInformationBanner = ({ toolName, signupPath }) => {\n const amplitudeDataAttribute = AMPLITUDE_BANNER_DATA_ATTRIBUTES[toolName];\n\n switch (toolName) {\n case AI_TOOL_NAMES.ASK_AI:\n return (\n <a href={signupPath} data-amplitude={amplitudeDataAttribute}>\n Get {AI_ANSWERS_QUOTA} answers per month\n </a>\n );\n case AI_TOOL_NAMES.DISCUSSION_QUESTIONS:\n case AI_TOOL_NAMES.QUIZ_QUESTIONS:\n case AI_TOOL_NAMES.ESSAY_PROMPTS:\n return (\n <>\n Get {AI_ANSWERS_QUOTA} uses of this tool per month with{\" \"}\n <a href={signupPath} data-amplitude={amplitudeDataAttribute}>\n A<sup>+</sup> Teacher\n </a>\n </>\n );\n default:\n return null;\n }\n};\n\nLockedInformationBanner.propTypes = {\n signupPath: PropTypes.string.isRequired,\n toolName: PropTypes.oneOf(Object.values(AI_TOOL_NAMES)).isRequired,\n};\n\nexport default LockedInformationBanner;\n","import React from \"react\";\n\nconst CopyAndSaveReminder = () => {\n return (\n <div className=\"ask-litcharts-ai--message\">\n <div className=\"body-2 notice\">\n <strong>Important: </strong>\n Copy and save this response. It will disappear if you refresh or leave\n this page.\n </div>\n </div>\n );\n};\n\nexport default CopyAndSaveReminder;\n","import React from \"react\";\nimport InitialMessageDescription from \"./InitialMessageDescription\";\nimport InitialMessageBullets from \"./InitialMessageBullets\";\nimport InitialMessageExample from \"./InitialMessageExample\";\n\nconst InitialMessage = ({\n inContent,\n toolName,\n locked,\n upgradeable,\n quotaRemaining,\n resourceTitle,\n signupPath,\n}) => {\n return (\n <>\n <div className=\"ask-litcharts-ai--intro\">\n <div className=\"hand-wave\" />\n <div className=\"body-2 ask-litcharts-ai--hello\">\n Hello! I'm LitCharts AI\n </div>\n <InitialMessageDescription\n toolName={toolName}\n resourceTitle={resourceTitle}\n inContent={inContent}\n />\n </div>\n <InitialMessageBullets\n quotaRemaining={quotaRemaining}\n inContent={inContent}\n toolName={toolName}\n signupPath={signupPath}\n locked={locked}\n upgradeable={upgradeable}\n />\n <InitialMessageExample\n toolName={toolName}\n locked={locked}\n inContent={inContent}\n />\n </>\n );\n};\n\nexport default InitialMessage;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport DisclaimerText from \"components/ai_tools/shared/AIForm/DisclaimerText\";\nimport {\n AI_TOOL_NAMES,\n AMPLITUDE_SIGNUP_INTRO_CHAT_ATTRIBUTES,\n AI_ANSWERS_QUOTA,\n} from \"../../constants\";\nimport useWindowResizeAndFormCollapse from \"../../hooks/useWindowResizeAndFormCollapse\";\n\nconst InitialMessageBullets = ({\n inContent,\n locked,\n quotaRemaining,\n signupPath,\n toolName,\n upgradeable,\n}) => {\n const { isLessThanSmallBreakpoint } = useWindowResizeAndFormCollapse();\n const amplitudeKey = AMPLITUDE_SIGNUP_INTRO_CHAT_ATTRIBUTES[toolName];\n\n switch (toolName) {\n case AI_TOOL_NAMES.ASK_AI:\n if (inContent) {\n if (locked) {\n return (\n <div>\n <a\n href={signupPath}\n data-amplitude=\"AIContentToolSignUpChatBubble\"\n >\n Get {AI_ANSWERS_QUOTA} answers per month.\n </a>\n </div>\n );\n }\n return (\n <div className=\"ai-form--disclaimer\">\n <DisclaimerText />\n </div>\n );\n }\n\n return (\n <ol className=\"body-2 ask-litcharts-ai--list\">\n {locked && (\n <li>\n <a href={signupPath} data-amplitude={amplitudeKey}>\n Sign up for LitCharts A<sup>+</sup>\n </a>\n </li>\n )}\n {!locked && quotaRemaining > 0 && (\n <li className=\"ask-litcharts-ai--list_ask-step\">\n Tap the Ask button\n </li>\n )}\n <li>Select a title in the dropdown</li>\n <li>Submit your question about that title</li>\n </ol>\n );\n case AI_TOOL_NAMES.DISCUSSION_QUESTIONS:\n return (\n <ol className=\"body-2 ask-litcharts-ai--list\">\n {locked && upgradeable && (\n <li>\n <a href={signupPath} data-amplitude={amplitudeKey}>\n Upgrade to LitCharts A<sup>+</sup> Teacher\n </a>\n </li>\n )}\n {locked && !upgradeable && (\n <li>\n <a href={signupPath} data-amplitude={amplitudeKey}>\n Sign up for LitCharts A<sup>+</sup> Teacher\n </a>\n </li>\n )}\n {!locked && isLessThanSmallBreakpoint && (\n <li>Tap the Generate Questions button</li>\n )}\n <li>Submit a title and discussion topic</li>\n <li>Get your discussion questions</li>\n </ol>\n );\n case AI_TOOL_NAMES.QUIZ_QUESTIONS:\n return (\n <ol className=\"body-2 ask-litcharts-ai--list\">\n {locked && upgradeable && (\n <li>\n <a href={signupPath} data-amplitude={amplitudeKey}>\n Upgrade to LitCharts A<sup>+</sup> Teacher\n </a>\n </li>\n )}\n {locked && !upgradeable && (\n <li>\n <a href={signupPath} data-amplitude={amplitudeKey}>\n Sign up for LitCharts A<sup>+</sup> Teacher\n </a>\n </li>\n )}\n {!locked && isLessThanSmallBreakpoint && (\n <li>Tap the Generate Questions button</li>\n )}\n <li>Submit a title and quiz topic</li>\n <li>Get your quiz questions</li>\n </ol>\n );\n case AI_TOOL_NAMES.ESSAY_PROMPTS:\n return (\n <ol className=\"body-2 ask-litcharts-ai--list\">\n {locked && upgradeable && (\n <li>\n <a href={signupPath} data-amplitude={amplitudeKey}>\n Upgrade to LitCharts A<sup>+</sup> Teacher\n </a>\n </li>\n )}\n {locked && !upgradeable && (\n <li>\n <a href={signupPath} data-amplitude={amplitudeKey}>\n Sign up for LitCharts A<sup>+</sup> Teacher\n </a>\n </li>\n )}\n {!locked && isLessThanSmallBreakpoint && (\n <li>Tap the Generate Prompts button</li>\n )}\n <li>Submit a title and essay topic</li>\n <li>Get your essay prompts</li>\n </ol>\n );\n default:\n return null;\n }\n};\n\nInitialMessageBullets.propTypes = {\n quotaRemaining: PropTypes.number.isRequired,\n signupPath: PropTypes.string.isRequired,\n locked: PropTypes.bool.isRequired,\n upgradeable: PropTypes.bool,\n toolName: PropTypes.oneOf(Object.values(AI_TOOL_NAMES)).isRequired,\n};\n\nInitialMessageBullets.defaultProps = {\n upgradeable: false,\n};\n\nexport default InitialMessageBullets;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { AI_TOOL_NAMES } from \"../../constants\";\n\nconst InitialMessageDescription = ({ toolName, resourceTitle, inContent }) => {\n switch (toolName) {\n case AI_TOOL_NAMES.ASK_AI:\n return inContent ? (\n <div className=\"body-2 ask-litcharts-ai--description\">\n Combining the literary wisdom of LitCharts and the power of AI, I can\n answer your questions about <i>{resourceTitle}</i> or any other title\n we cover, instantly.\n </div>\n ) : (\n <div className=\"body-2 ask-litcharts-ai--description\">\n Need help with literature? Ask me anything. Combining the literary\n wisdom of LitCharts and the power of AI, I'm here to provide\n instant answers and explanations. Complete these steps to get help in\n seconds:\n </div>\n );\n case AI_TOOL_NAMES.DISCUSSION_QUESTIONS:\n return (\n <div className=\"body-2 ask-litcharts-ai--description\">\n Combining the literary wisdom of LitCharts and the power of AI, I can\n help you instantly create discussion questions that will get people\n talking. Just complete these steps:\n </div>\n );\n case AI_TOOL_NAMES.QUIZ_QUESTIONS:\n return (\n <div className=\"body-2 ask-litcharts-ai--description\">\n Combining the literary wisdom of LitCharts and the power of AI, I can\n instantly create focused quiz questions that you can use or modify as\n you desire. Just complete these steps:\n </div>\n );\n case AI_TOOL_NAMES.ESSAY_PROMPTS:\n return (\n <div className=\"body-2 ask-litcharts-ai--description\">\n Combining the literary wisdom of LitCharts and the power of AI, I can\n instantly create thought-provoking essay prompts that you can use or\n modify as you desire. Just complete these steps:\n </div>\n );\n default:\n return null;\n }\n};\n\nInitialMessageDescription.propTypes = {\n inContent: PropTypes.bool,\n resourceTitle: PropTypes.string,\n toolName: PropTypes.oneOf(Object.values(AI_TOOL_NAMES)).isRequired,\n};\n\nexport default InitialMessageDescription;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport AskAiImg from \"images/components/ai-tools/ask-ai-intro.gif\";\nimport EpgImg from \"images/components/ai-tools/epg-intro.gif\";\nimport DqgImg from \"images/components/ai-tools/dqg-intro.gif\";\nimport QqgImg from \"images/components/ai-tools/qqg-intro.gif\";\n\nimport { AI_TOOL_NAMES } from \"../../constants\";\n\nconst InitialMessageExample = ({ locked, toolName, inContent }) => {\n switch (toolName) {\n case AI_TOOL_NAMES.ASK_AI:\n if (inContent) {\n return null;\n }\n\n if (locked) {\n return (\n <div className=\"body-2\">\n <span>See Ask LitCharts AI in action below:</span>\n <img\n className=\"ask-litcharts-ai--gif\"\n src={AskAiImg}\n alt=\"Ask LitCharts AI intro\"\n />\n </div>\n );\n }\n\n return (\n <div className=\"body-2 notice\">\n For best results, make your questions as specific as possible.\n </div>\n );\n case AI_TOOL_NAMES.DISCUSSION_QUESTIONS:\n return locked ? (\n <div className=\"body-2\">\n <span>See the Discussion Question Generator in action below:</span>\n <img\n className=\"ask-litcharts-ai--gif\"\n src={DqgImg}\n alt=\"Ask LitCharts AI intro\"\n />\n </div>\n ) : null;\n case AI_TOOL_NAMES.QUIZ_QUESTIONS:\n return locked ? (\n <div className=\"body-2\">\n <span>See the Quiz Question Generator in action below:</span>\n <img\n className=\"ask-litcharts-ai--gif\"\n src={QqgImg}\n alt=\"Ask LitCharts AI intro\"\n />\n </div>\n ) : null;\n case AI_TOOL_NAMES.ESSAY_PROMPTS:\n return locked ? (\n <div className=\"body-2\">\n <span>See the Essay Prompt Generator in action below:</span>\n <img\n className=\"ask-litcharts-ai--gif\"\n src={EpgImg}\n alt=\"Ask LitCharts AI intro\"\n />\n </div>\n ) : null;\n default:\n return null;\n }\n};\n\nInitialMessageExample.propTypes = {\n locked: PropTypes.bool.isRequired,\n toolName: PropTypes.oneOf(Object.values(AI_TOOL_NAMES)).isRequired,\n inContent: PropTypes.bool.isRequired,\n};\n\nexport default InitialMessageExample;\n","import React, { useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { reject } from \"lodash\";\nimport LitCard from \"../shared/LitCard\";\n\nconst propTypes = {\n bookmarks: PropTypes.array,\n};\n\n// This is basically a very trimmed down copy of the `GuideList` component\n// in order to reuse existing stylings for lit cards organization.\n\nfunction EmptyContainer({ browsePath, emptyImgSrc }) {\n return (\n <div className=\"bookmarks-container__empty\">\n <img\n alt=\"save guide illustration\"\n className=\"bookmarks-empty__image\"\n src={emptyImgSrc}\n />\n <div className=\"bookmarks-empty__description\">\n <span className=\"body-1\">You haven't saved any guides yet.</span>\n <span className=\"body-1\">Save your first guide!</span>\n </div>\n <a\n className=\"btn btn-lg btn-default bookmarks-empty_browse-btn\"\n href={browsePath}\n >\n Browse Guides\n </a>\n </div>\n );\n}\n\nexport default function BookmarkList({\n bookmarks: bookmarksFromProps,\n browsePath,\n emptyImgSrc,\n}) {\n const [bookmarks, setBookmarks] = useState(bookmarksFromProps);\n const subtitleText =\n bookmarks.length > 1\n ? `Here are the ${bookmarks.length} guides you've saved.`\n : \"Here is the 1 guide you've saved.\";\n\n const handleRemoveBookmark = (bookmarkId) => {\n const newBookmarks = reject(\n bookmarks,\n (bookmark) => bookmark.bookmarkId === bookmarkId\n );\n setBookmarks(newBookmarks);\n };\n\n return (\n <div>\n {bookmarks.length > 0 ? (\n <>\n <div className=\"bookmarks__subtitle subtitle-1\">{subtitleText}</div>\n <div className=\"guide-list\">\n <div className=\"guide-list__groups-wrapper\">\n <ul className=\"guide-list__groups guide-list__groups--grid\">\n <li className=\"guide-list__group\">\n <ul className=\"guide-list__guides\">\n <div className=\"row\">\n {bookmarks.map((bookmark, index) => (\n <div\n className=\"col-xxs-12 col-xs-6 col-sm-6 col-md-4 col-lg-4\"\n key={bookmark.slug}\n >\n <li className=\"guide-list__guide\">\n <LitCard\n {...bookmark}\n hideSuccessCta\n index={index}\n onRemoval={handleRemoveBookmark}\n includeTags\n userSignedIn\n />\n </li>\n </div>\n ))}\n </div>\n </ul>\n </li>\n </ul>\n </div>\n </div>\n </>\n ) : (\n <EmptyContainer browsePath={browsePath} emptyImgSrc={emptyImgSrc} />\n )}\n </div>\n );\n}\n\nBookmarkList.propTypes = propTypes;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport Checkbox from \"../shared/Checkbox\";\nimport APlusDialog from \"../shared/dialogs/APlus\";\n\nclass RelatedThemesFilterBox extends React.Component {\n static propTypes = {\n filterables: PropTypes.array.isRequired,\n header: PropTypes.string.isRequired,\n isPromoVisible: PropTypes.bool.isRequired,\n isSubscribed: PropTypes.bool.isRequired,\n isFreeTier: PropTypes.bool.isRequired,\n onChange: PropTypes.func,\n showSidebarPromo: PropTypes.func.isRequired,\n totalFilters: PropTypes.number.isRequired,\n };\n\n constructor(props) {\n super(props);\n\n this.onCheckboxChange = (e) => {\n if (!props.isSubscribed) {\n e.preventDefault();\n props.showSidebarPromo();\n return;\n }\n\n const { target } = e;\n\n if (target.checked) {\n this.setState({ selected: this.state.selected.concat([target.value]) });\n } else {\n this.setState({\n selected: this.state.selected.filter((s) => s !== target.value),\n });\n }\n };\n\n this.onMoreToggleClick = (e) => {\n if (!props.isSubscribed) {\n props.showSidebarPromo();\n return;\n }\n\n this.setState({ allVisible: !this.state.allVisible });\n };\n\n this.state = {\n allVisible: false,\n selected: [],\n };\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (\n this.state.selected.length !== prevState.selected.length &&\n this.props.onChange\n ) {\n this.props.onChange(this.state.selected);\n }\n }\n\n renderMoreToggleBtn() {\n const { allVisible } = this.state;\n const { header, totalFilters } = this.props;\n\n if (totalFilters <= 5) {\n return null;\n }\n\n return (\n <button\n className=\"btn btn-borderless btn-text btn-xs related-themes__show-more-less\"\n onClick={this.onMoreToggleClick}\n >\n {`See ${allVisible ? \"less\" : \"more\"} ${header.toLowerCase()}s`}\n </button>\n );\n }\n\n render() {\n const { allVisible } = this.state;\n const { header, isPromoVisible, totalFilters } = this.props;\n let { filterables } = this.props;\n\n if (!allVisible) {\n filterables = filterables.slice(0, 5);\n }\n\n return (\n <div className=\"filter-box\" style={{ position: \"relative\" }}>\n {isPromoVisible && <div className=\"overlay\" style={{ zIndex: \"1\" }} />}\n <div className=\"header lit-guides\">\n {header} ({totalFilters})\n </div>\n <ul className=\"list list_checkbox\">\n {filterables.map((f) => (\n <li className=\"list__item\" key={f.label}>\n <Checkbox\n label={`${f.label} (${f.count})`}\n name={`filter_checkbox_${f.label\n .toLowerCase()\n .replace(/\\W/g, \"-\")}`}\n onChange={this.onCheckboxChange}\n value={f.label}\n />\n </li>\n ))}\n </ul>\n {this.renderMoreToggleBtn()}\n </div>\n );\n }\n}\n\nexport default class RelatedThemes extends React.Component {\n static propTypes = {\n aPlusDialogContent: PropTypes.string.isRequired,\n aPlusDialogHref: PropTypes.string.isRequired,\n aPlusDialogLogoSrc: PropTypes.string.isRequired,\n blurredThemesImgSrc: PropTypes.string,\n filterableAuthorCount: PropTypes.number.isRequired,\n filteredAuthors: PropTypes.array.isRequired,\n filterableBookCount: PropTypes.number.isRequired,\n filteredBooks: PropTypes.array.isRequired,\n isSubscribed: PropTypes.bool.isRequired,\n isFreeTier: PropTypes.bool.isRequired,\n mainTheme: PropTypes.object.isRequired,\n relatedThemes: PropTypes.array.isRequired,\n relatedThemesCount: PropTypes.number.isRequired,\n };\n\n constructor(props) {\n super(props);\n\n this.closeSidebarPromo = (e) => {\n this.setState({ sidebarPromoVisible: false });\n };\n\n this.showSidebarPromo = () => {\n this.setState({ sidebarPromoVisible: true });\n };\n\n this.state = {\n filteredAuthors: [],\n filteredBooks: [],\n filteredThemes: props.relatedThemes,\n sidebarPromoVisible: false,\n };\n }\n\n componentDidUpdate(prevProps, prevState) {\n const { filteredAuthors, filteredBooks } = this.state;\n if (\n filteredAuthors.length !== prevState.filteredAuthors.length ||\n filteredBooks.length !== prevState.filteredBooks.length\n ) {\n let filteredThemes = [];\n if (filteredAuthors.length || filteredBooks.length) {\n const a = this.selectedFiltersToHash(filteredAuthors);\n const b = this.selectedFiltersToHash(filteredBooks);\n filteredThemes = this.props.relatedThemes.filter(\n (t) => a[t.bookAuthorFullName] || b[t.bookTitle]\n );\n } else {\n filteredThemes = this.props.relatedThemes;\n }\n this.setState({ filteredThemes });\n }\n }\n\n selectedFiltersToHash(selected) {\n return selected.reduce((h, k) => {\n h[k] = true;\n return h;\n }, {});\n }\n\n renderFilterBox({ filterables, header, key, totalFilters }) {\n const { aPlusDialogHref, aPlusDialogLogoSrc, isSubscribed } = this.props;\n\n return (\n <RelatedThemesFilterBox\n aPlusDialogHref={aPlusDialogHref}\n aPlusDialogLogoSrc={aPlusDialogLogoSrc}\n filterables={filterables}\n header={header}\n isPromoVisible={this.state.sidebarPromoVisible}\n isSubscribed={isSubscribed}\n onChange={(selected) => this.setState({ [key]: selected })}\n showSidebarPromo={this.showSidebarPromo}\n totalFilters={totalFilters}\n />\n );\n }\n\n renderSidebarPromo() {\n if (!this.state.sidebarPromoVisible) {\n return null;\n }\n\n const { aPlusDialogHref, aPlusDialogLogoSrc, isFreeTier } = this.props;\n\n return (\n <div className=\"a-plus-dialog\" id=\"refinement-promo\">\n <APlusDialog\n isFreeTier={isFreeTier}\n content=\"Update to refine your search.\"\n href={aPlusDialogHref}\n amplitudeKey=\"litRelatedThemesFilterSignUp\"\n logoSrc={aPlusDialogLogoSrc}\n handleClose={this.closeSidebarPromo}\n shouldRenderCloseBtn\n />\n </div>\n );\n }\n\n renderSidebar() {\n const {\n filterableAuthorCount,\n filterableAuthors,\n filterableBookCount,\n filterableBooks,\n } = this.props;\n return (\n <div className=\"sidebar\">\n <div className=\"sidebar__header\">\n <div className=\"sidebar__title\">Refine Your Search by...</div>\n </div>\n {this.renderFilterBox({\n filterables: filterableBooks,\n key: \"filteredBooks\",\n header: \"Book Title\",\n totalFilters: filterableBookCount,\n })}\n {this.renderFilterBox({\n filterables: filterableAuthors,\n key: \"filteredAuthors\",\n header: \"Author\",\n totalFilters: filterableAuthorCount,\n })}\n {this.renderSidebarPromo()}\n </div>\n );\n }\n\n renderThemeYouWereReading() {\n const { mainTheme } = this.props;\n\n return (\n <div id=\"theme-you-were-reading\" className=\"theme-box\">\n <div className=\"theme-box__header\">\n <div className=\"theme-box__title\">Theme You Were Reading</div>\n </div>\n <div className=\"card card_theme\">\n <div className=\"card-theme-col\">\n <a href={mainTheme.path} className=\"card__icon\">\n <span\n className=\"visible-xs\"\n dangerouslySetInnerHTML={{ __html: mainTheme.mediumIconHtml }}\n />\n <span\n className=\"hidden-xs\"\n dangerouslySetInnerHTML={{ __html: mainTheme.largeIconHtml }}\n />\n </a>\n </div>\n <div className=\"card-theme-col\">\n <div className=\"card__title\">\n <a href={mainTheme.path} className=\"theme-title link\">\n {mainTheme.title}\n </a>{\" \"}\n in{\" \"}\n <a href={mainTheme.bookPath} className=\"link\">\n {mainTheme.bookTitle}\n </a>{\" \"}\n by {mainTheme.bookAuthorFullName}\n </div>\n </div>\n </div>\n </div>\n );\n }\n\n renderRelatedThemeCards() {\n if (!this.props.isSubscribed) {\n return null;\n }\n\n const { filteredThemes } = this.state;\n\n return filteredThemes.map((t) => (\n <div className=\"theme-box\" key={t.path}>\n <div className=\"card card_theme\">\n <div className=\"card-theme-col\">\n <a href={t.path} className=\"card__icon\">\n <span\n className=\"visible-xs\"\n dangerouslySetInnerHTML={{ __html: t.mediumIconHtml }}\n />\n <span\n className=\"hidden-xs\"\n dangerouslySetInnerHTML={{ __html: t.largeIconHtml }}\n />\n </a>\n </div>\n <div className=\"card-theme-col\">\n <div className=\"card__title\">\n <a href={t.path} className=\"theme-title link\">\n {t.title}\n </a>{\" \"}\n in{\" \"}\n <a href={t.bookPath} className=\"link\">\n {t.bookTitle}\n </a>{\" \"}\n by {t.bookAuthorFullName}\n </div>\n <p\n className=\"card__description no-inline-characters no-inline-symbols no-inline-terms\"\n dangerouslySetInnerHTML={{ __html: t.descriptionHtml }}\n />\n <div className=\"read-full\">\n <a href={t.path} className=\"link\">\n Read analysis of {t.title}\n </a>\n </div>\n </div>\n </div>\n </div>\n ));\n }\n\n renderRelatedThemesBlur() {\n if (this.props.isSubscribed) {\n return null;\n }\n\n const { blurredThemesImgSrc } = this.props;\n\n return (\n <div>\n <img src={blurredThemesImgSrc} style={{ maxWidth: \"100%\" }} />\n <img src={blurredThemesImgSrc} style={{ maxWidth: \"100%\" }} />\n </div>\n );\n }\n\n renderPromo() {\n if (this.props.isSubscribed) {\n return null;\n }\n\n const { aPlusDialogContent, aPlusDialogHref, aPlusDialogLogoSrc } =\n this.props;\n\n return (\n <div>\n <APlusDialog\n content={aPlusDialogContent}\n href={aPlusDialogHref}\n amplitudeKey=\"litRelatedThemesCentralColumnSignUp\"\n logoSrc={aPlusDialogLogoSrc}\n />\n </div>\n );\n }\n\n getThemeCount() {\n const { relatedThemes, relatedThemesCount } = this.props;\n const { filteredThemes } = this.state;\n // no relatedThemes are passed unless user is subscribed\n return relatedThemes.length ? filteredThemes.length : relatedThemesCount;\n }\n\n renderRelatedThemes() {\n return (\n <div className=\"closed-box\">\n <div className=\"closed-box__container\" id=\"related_themes\">\n <div className=\"theme\">\n <div className=\"theme-box__header\">\n <div className=\"theme-box__title\">\n <span id=\"related-theme-count\">{this.getThemeCount()}</span>{\" \"}\n Related Themes from Other Texts\n </div>\n <div className=\"theme-box__subtitle\">\n Themes are ordered from most to least related.\n </div>\n </div>\n <div className=\"related-themes\">\n {this.renderRelatedThemeCards()}\n {this.renderRelatedThemesBlur()}\n {this.renderPromo()}\n </div>\n </div>\n </div>\n </div>\n );\n }\n\n render() {\n return (\n <div className=\"related\">\n <div className=\"container\">\n <div className=\"row\">\n <div className=\"col-xs-12 col-sm-4\">{this.renderSidebar()}</div>\n <div className=\"col-xs-12 col-sm-8\">\n {this.renderThemeYouWereReading()}\n {this.renderRelatedThemes()}\n </div>\n </div>\n </div>\n </div>\n );\n }\n}\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\n// eslint-disable-next-line react/prefer-stateless-function\nclass SummaryAnalysisAPlusDialog extends React.Component {\n static propTypes = {\n content: PropTypes.string,\n href: PropTypes.string.isRequired,\n linkClasses: PropTypes.string,\n logoSrc: PropTypes.string,\n logoSrcXs: PropTypes.string,\n isFreeTier: PropTypes.bool.isRequired,\n };\n\n render() {\n return (\n <div>\n <div className=\"a-plus-dialog__header text-center\">\n <div className=\"hidden-xs\">\n <img\n alt=\"LitCharts Logo\"\n className=\"brand\"\n src={this.props.logoSrc}\n />\n </div>\n <div className=\"visible-xs\">\n <img\n alt=\"LitCharts Logo\"\n className=\"brand\"\n src={this.props.logoSrcXs}\n />\n </div>\n </div>\n <div className=\"a-plus-dialog__body subtitle-1 text-center\">\n <p\n className=\"a-plus-dialog__content\"\n dangerouslySetInnerHTML={{ __html: this.props.content }}\n />\n <a\n className={`a-plus-dialog__subscribe btn btn-a-plus btn-md btn--icon-left ${\n this.props.linkClasses || \"\"\n }`}\n href={this.props.href}\n data-amplitude=\"litBlurredAnalysisPrimary\"\n >\n <i className=\"lc-icon lc-icon-sm lc-icon-lock-filled\" />\n Get <span className=\"hidden-xs\">LitCharts </span>A<sup>+</sup>\n </a>\n </div>\n {!this.props.isFreeTier && (\n <div className=\"a-plus-dialog__footer subtitle-2 text-center\">\n <div className=\"a-plus-dialog__sign-in\">\n <span className=\"a-plus-dialog__sign-in--text\">or </span>\n <a href=\"/sign-in\">sign in</a>\n </div>\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default SummaryAnalysisAPlusDialog;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport Expandable from \"components/shared/Expandable\";\nimport GroupsInfoFaqRow from \"components/groups/info/GroupsInfoFaqRow\";\n\nexport default function GroupsInfoExpandableFaqRow({ question, answer }) {\n return (\n <Expandable expandableClassName=\"groups-info__expandable-row\">\n <GroupsInfoFaqRow question={question} answer={answer} />\n </Expandable>\n );\n}\nGroupsInfoExpandableFaqRow.propTypes = {\n question: PropTypes.string,\n answer: PropTypes.string,\n};\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nexport default function GroupsInfoFaqRow(props) {\n return (\n <>\n <div className=\"groups-info__question body-1\">\n <div className=\"groups-info__question--text\">{props.question}</div>\n <div\n className={`groups-info__expandable-row--icon lc-icon lc-icon-sm ${\n props.isExpanded ? \"lc-icon-up\" : \"lc-icon-down\"\n }`}\n />\n </div>\n <div\n className=\"groups-info__answer body-2\"\n dangerouslySetInnerHTML={{ __html: props.answer }}\n />\n </>\n );\n}\nGroupsInfoFaqRow.propTypes = {\n question: PropTypes.string.isRequired,\n answer: PropTypes.string.isRequired,\n};\n","import React from \"react\";\nimport LocalTag from \"../shared/LocalTag\";\n\nconst ChaptersRow = ({ index, summarySection }) => (\n <div className={`${index === 0 ? \"first\" : \"\"} row`}>\n <span className=\"title-4 left-aligned\">{summarySection.title} </span>\n <div className=\"literary-devices local-tags-container\">\n {summarySection.litTerms.map((litTerm) => (\n <LocalTag key={litTerm.id} litTerm={litTerm} />\n ))}\n </div>\n </div>\n);\n\nexport default ChaptersRow;\n","import React from \"react\";\nimport ChaptersRow from \"./ChaptersRow\";\n\nconst ChaptersView = ({ summarySections }) => (\n <div className=\"literary-devices chapters\">\n {summarySections.length ? (\n summarySections.map((ss, index) => (\n <ChaptersRow index={index} key={ss.id} summarySection={ss} />\n ))\n ) : (\n <em className=\"text-center no-matches\">No matches.</em>\n )}\n </div>\n);\nexport default ChaptersView;\n","import React, { useMemo } from \"react\";\nimport { CHAPTERS, DEVICES } from \"../../constants/literary_devices\";\nimport ChaptersView from \"./ChaptersView\";\nimport DevicesView from \"./DevicesView\";\n\nconst Content = ({\n hideFilters,\n filterOptions,\n filterBy,\n summarySections,\n litTerms,\n viewMode,\n}) => {\n const sortedLitTerms = useMemo(\n () =>\n litTerms.filter(\n (term) =>\n term.slug === filterBy.value ||\n filterBy.value === filterOptions[0].value\n ),\n [filterBy]\n );\n const sortedSummarySections = useMemo(\n () =>\n hideFilters\n ? []\n : summarySections\n .filter((ss) =>\n ss.litTerms.some(\n (term) =>\n term.slug === filterBy.value ||\n filterBy.value === filterOptions[0].value\n )\n )\n .map((ss) => ({\n ...ss,\n litTerms: ss.litTerms.filter(\n (term) =>\n term.slug === filterBy.value ||\n filterBy?.value === filterOptions[0].value\n ),\n })),\n [hideFilters, filterBy]\n );\n\n switch (viewMode) {\n case CHAPTERS:\n return <ChaptersView summarySections={sortedSummarySections} />;\n case DEVICES:\n return <DevicesView litTerms={sortedLitTerms} />;\n default:\n return null;\n }\n};\n\nexport default Content;\n","import React from \"react\";\n\nconst DevicesRow = ({ index, litTerm }) => (\n <a href={litTerm.showPath}>\n <div className={`row ${index === 0 ? \"first\" : \"\"}`}>\n <span className=\"title-4 term\">{litTerm.name} </span>\n <span className=\"body-2\">\n {litTerm.keyExamplesCount} key{\" \"}\n {litTerm.keyExamplesCount > 1 ? \"examples\" : \"example\"}\n </span>\n <div className=\"visible-xs visible-sm pull-right arrow\">\n <i className=\"lc-icon lc-icon-sm lc-icon-right\" />\n </div>\n </div>\n </a>\n);\n\nexport default DevicesRow;\n","import React from \"react\";\nimport DevicesRow from \"./DevicesRow\";\n\nconst DevicesView = ({ litTerms }) => (\n <div className=\"literary-devices devices\">\n {litTerms.map((litTerm, index) => (\n <DevicesRow index={index} key={litTerm.id} litTerm={litTerm} />\n ))}\n </div>\n);\n\nexport default DevicesView;\n","import React from \"react\";\nimport { CHAPTERS, DEVICES } from \"../../constants/literary_devices\";\nimport Select from \"../shared/Select\";\n\nconst Filters = ({\n currentFilter,\n setCurrentFilter,\n filterOptions,\n setViewMode,\n hideFilters,\n viewMode,\n sectionType,\n}) => {\n if (hideFilters) {\n return null;\n }\n\n const setViewModeToChapters = () => {\n setViewMode(CHAPTERS);\n };\n\n const setViewModeToDevices = () => {\n setViewMode(DEVICES);\n };\n\n const onChangeFilter = (option) => {\n setCurrentFilter(option);\n };\n\n return (\n <div id=\"anchor\">\n <div className=\"literary-devices filters\">\n <div className=\"options-container\">\n <span>Sort by: </span>\n <button\n className={`btn sort-by-option ${\n viewMode === DEVICES ? \"sort-by-option--active\" : \"\"\n }`}\n onClick={setViewModeToDevices}\n type=\"button\"\n >\n <span className=\"btn-text\">Devices A-Z</span>\n </button>\n <button\n className={`btn sort-by-option ${\n viewMode === CHAPTERS ? \"sort-by-option--active\" : \"\"\n }`}\n onClick={setViewModeToChapters}\n type=\"button\"\n >\n <span className=\"btn-text\">{sectionType}</span>\n </button>\n </div>\n <Select\n isControlled\n id=\"literary-devices-filter\"\n name=\"literary-devices-filter\"\n options={filterOptions}\n onChange={onChangeFilter}\n value={currentFilter.value}\n />\n </div>\n </div>\n );\n};\n\nexport default Filters;\n","/* eslint-disable react/prefer-stateless-function */\nimport React from \"react\";\nimport { DEVICES } from \"../../constants/literary_devices\";\nimport Content from \"./Content\";\nimport Filters from \"./Filters\";\nimport PageDescription from \"./PageDescription\";\nimport QueryParamsControls from \"./QueryParamsControls\";\n\nclass LandingPage extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n viewMode: DEVICES,\n filterBy: this.props.filterOptions[0],\n };\n }\n\n handleParamChange = (\n viewMode = this.state.viewMode,\n filterBy = this.state.filterBy,\n updateHistory = true\n ) => {\n const url = new URL(window.location);\n if (viewMode) {\n url.searchParams.set(\"viewMode\", viewMode);\n }\n if (filterBy) {\n url.searchParams.set(\"filterBy\", filterBy.value);\n }\n if (updateHistory) {\n window.history.pushState({}, \"\", url.toString());\n }\n };\n\n setViewMode = (value, updateHistory = true) => {\n this.setState({ viewMode: value }, () =>\n this.handleParamChange(value, undefined, updateHistory)\n );\n };\n\n setCurrentFilter = (option, updateHistory = true) => {\n this.setState({ filterBy: option }, () =>\n this.handleParamChange(undefined, option, updateHistory)\n );\n };\n\n lowerCaseOptions = this.props.filterOptions.map((option) => ({\n ...option,\n value: option.value.toLowerCase(),\n }));\n\n render() {\n return (\n <>\n <PageDescription\n authorName={this.props.authorName}\n bookTitle={this.props.bookTitle}\n />\n <Filters\n sectionType={this.props.sectionType}\n setCurrentFilter={this.setCurrentFilter}\n currentFilter={this.state.filterBy}\n filterOptions={this.lowerCaseOptions}\n setViewMode={this.setViewMode}\n viewMode={this.state.viewMode?.toLowerCase()}\n hideFilters={this.props.hideFilters}\n />\n <Content\n hideFilters={this.props.hideFilters}\n filterOptions={this.props.filterOptions}\n filterBy={this.state.filterBy}\n summarySections={this.props.summarySections}\n viewMode={this.state.viewMode}\n litTerms={this.props.litTerms}\n />\n <QueryParamsControls\n filterOptions={this.props.filterOptions}\n setViewMode={this.setViewMode}\n setFilterBy={this.setCurrentFilter}\n />\n </>\n );\n }\n}\n\nexport default LandingPage;\n","import React from \"react\";\n\nconst PageDescription = ({ authorName, bookTitle }) => (\n <p className=\"body-2 left-aligned\">\n See key examples and analysis of the literary devices {authorName} uses in{\" \"}\n <em>{bookTitle}</em>, along with the quotes, themes, symbols, and characters\n related to each device.\n </p>\n);\n\nexport default PageDescription;\n","import React, { useEffect } from \"react\";\nimport helpers from \"helpers/base\";\nimport { CHAPTERS, DEVICES } from \"../../constants/literary_devices\";\n\n// TODO: Move all this into the parent component since it's not really adding much\nconst QueryParamsControls = ({ filterOptions, setViewMode, setFilterBy }) => {\n const findFilterByOption = (filterByOption) =>\n filterOptions.find((option) => option.value === filterByOption);\n\n const setParamFilters = (_) => {\n const viewModeParam = helpers.getQueryParam(\"viewMode\")?.toLowerCase();\n const filterByParam = helpers.getQueryParam(\"filterBy\")?.toLowerCase();\n\n if (!viewModeParam && !filterByParam) {\n setViewMode(DEVICES, false);\n setFilterBy(filterOptions[0], false);\n }\n if (viewModeParam) {\n setViewMode(viewModeParam, false);\n }\n\n if (findFilterByOption(filterByParam)) {\n setFilterBy(findFilterByOption(filterByParam), false);\n }\n };\n\n useEffect(() => {\n window.addEventListener(\"popstate\", setParamFilters);\n return () => window.removeEventListener(\"popstate\", setParamFilters);\n }, []);\n\n useEffect(() => {\n const viewModeParam = helpers.getQueryParam(\"viewMode\")?.toLowerCase();\n const filterByParam = helpers.getQueryParam(\"filterBy\")?.toLowerCase();\n if (viewModeParam === (CHAPTERS || DEVICES)) {\n setViewMode(viewModeParam);\n }\n if (filterByParam && findFilterByOption(filterByParam)) {\n setFilterBy(findFilterByOption(filterByParam));\n }\n }, []);\n // eslint-disable-next-line react/jsx-no-useless-fragment\n return <></>;\n};\n\nexport default QueryParamsControls;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport MenuItem from \"./MenuItem\";\nimport MenuParent, { menuParentProps } from \"./MenuParent\";\n\nconst propTypes = {\n items: PropTypes.arrayOf(PropTypes.shape(menuParentProps)),\n};\n\nconst Menu = ({ items }) => {\n return (\n <div className=\"nav-bar--container\">\n {items.map((item) => {\n return (\n <div key={item.label} className=\"nav-bar--items\">\n {item.children?.length > 0 ? (\n <MenuParent {...item} />\n ) : (\n <MenuItem label={item.label} url={item.url} />\n )}\n </div>\n );\n })}\n </div>\n );\n};\n\nMenu.propTypes = propTypes;\n\nexport default Menu;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nexport const menuItemType = {\n label: PropTypes.string.isRequired,\n url: PropTypes.string.isRequired,\n};\n\nconst MenuItem = ({ label, url }) => {\n return (\n <a\n className=\"nav-bar--child_item\"\n href={url}\n data-amplitude=\"universalHeaderNavLink\"\n data-amplitude-text={label}\n >\n {label}\n </a>\n );\n};\n\nMenuItem.propTypes = menuItemType;\n\nexport default MenuItem;\n","import React, { useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport MenuItem, { menuItemType } from \"./MenuItem\";\nimport Icon from \"../shared/Icon\";\n\nexport const menuParentProps = {\n shouldAutoExpand: PropTypes.bool,\n children: PropTypes.arrayOf(PropTypes.shape(menuItemType)),\n iconClass: PropTypes.string,\n iconUrl: PropTypes.string,\n label: PropTypes.string.isRequired,\n};\n\nconst defaultProps = {\n shouldAutoExpand: false,\n children: [],\n iconUrl: \"\",\n iconClass: \"\",\n};\n\nconst MenuParent = ({\n shouldAutoExpand,\n children,\n iconUrl,\n iconClass,\n label,\n}) => {\n const [showChildren, setShowChildren] = useState(shouldAutoExpand);\n\n const toggleExpand = () => {\n setShowChildren((show) => !show);\n };\n\n return (\n <div className=\"nav-bar--parent\">\n <div\n className=\"nav-bar--parent_item\"\n onClick={toggleExpand}\n onKeyPress={toggleExpand}\n role=\"menu\"\n tabIndex={0}\n >\n {iconClass ? (\n <Icon name={iconClass} size=\"sm\" className=\"nav-bar--parent_icon\" />\n ) : (\n <img src={iconUrl} alt={label} className=\"nav-bar--parent_icon-img\" />\n )}\n <span>{label}</span>\n <Icon name={showChildren ? \"up\" : \"down\"} size=\"xs\" />\n </div>\n <div className=\"nav-bar--parent_children\">\n {showChildren &&\n children.map((child) => {\n return (\n <MenuItem key={child.label} label={child.label} url={child.url} />\n );\n })}\n </div>\n </div>\n );\n};\n\nMenuParent.propTypes = menuParentProps;\nMenuParent.defaultProps = defaultProps;\n\nexport default MenuParent;\n","import React from \"react\";\nimport TextToggle from \"../../../shared/TextToggle\";\n\nconst AiToolToggle = ({\n publicDomain,\n alignment,\n leftContent,\n rightContent,\n}) => {\n const handleToggle = () => {\n handleLargeScreenClick();\n handleSmallScreenClick();\n };\n\n const handleLargeScreenClick = () => {\n const aiTool = document.querySelector(\".poem-ai-tool\");\n const content = document.querySelector(\".poem-guide-content\");\n [\"hidden-lg\", \"hidden-md\"].forEach((cls) => {\n aiTool.classList.toggle(cls);\n content.classList.toggle(cls);\n });\n };\n\n const handleSmallScreenClick = () => {\n const aiTool = document.querySelector(\".poem-ai-tool\");\n const content = document.querySelector(\".poem-guide-content\");\n [\"hidden-sm\", \"hidden-xs\"].forEach((cls) => {\n aiTool.classList.toggle(cls);\n content.classList.toggle(cls);\n });\n\n const switchBanners = document.querySelectorAll(\n \"#poem-switch-to-ai, #poem-switch-to-content\"\n );\n\n switchBanners.forEach((banner) => {\n banner.classList.toggle(\"hidden\");\n });\n };\n\n return publicDomain ? (\n <div className=\"ai-tool-toggle-container\">\n <TextToggle\n alignment={alignment}\n leftContent={leftContent}\n rightContent={rightContent}\n onToggle={handleToggle}\n />\n </div>\n ) : (\n <div\n aria-hidden=\"true\"\n className=\"lc-text-toggle empty\"\n onClick={handleSmallScreenClick}\n />\n );\n};\n\nexport default AiToolToggle;\n","import React from \"react\";\nimport Select from \"components/shared/Select\";\nimport selectors from \"constants/poetry/poems/show/selectors\";\nimport helpers from \"helpers/base\";\n\nclass ComponentItemSelect extends React.Component {\n selectComponentItem(item) {\n const { id } = item;\n const { title } = item;\n const { modalTitle } = item;\n const modalCategory = modalTitle + (title ? \": \" : \"\") + title;\n const { category } = item;\n const { componentValue } = item;\n const { activeContext } = item;\n\n const selector = `${selectors.COMPONENT}[data-category='${category}']`;\n const $component = $(selector);\n const $section = $component.closest(selectors.SECTION);\n\n if (helpers.isMobile() || $section.hasClass(\"is-focused\")) {\n const $title = $($component.find(selectors.COMPONENT_TITLE));\n const $valueReplace = $(\n $component.find(selectors.COMPONENT_VALUE_REPLACE)\n );\n const $activeContext = $($component.find(selectors.ACTIVE_CONTEXT_NOTE));\n const $content = $(selectors.POEM_CONTENT);\n const $modalCategory = $(selectors.TEXT_MODAL_CATEGORY);\n\n $title.text(title);\n this.setComponentContentViaAjax(id, $content);\n $modalCategory.text(modalCategory);\n $activeContext.html(activeContext);\n $valueReplace.html(componentValue);\n }\n }\n\n onChange(option) {\n this.selectComponentItem(option);\n }\n\n setComponentContentViaAjax(componentId, el) {\n $.ajax({\n url: `/poetry/poem_components/${componentId}`,\n type: \"GET\",\n dataType: \"json\",\n success(data) {\n el.html(data.content);\n },\n });\n }\n\n render() {\n return (\n <Select\n {...this.props}\n id=\"poem-component-items__select\"\n placeholder=\"Select vocabulary word\"\n onChange={(value) => this.onChange(value)}\n />\n );\n }\n}\n\nexport default ComponentItemSelect;\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport InContentAskLitchartsAI from \"../../../ai_tools/InContentAskLitchartsAI\";\n\nconst UncachedAITool = (props) => {\n const content = <InContentAskLitchartsAI {...props} />;\n const container = document.querySelector(\n \"#poems-show__guide__ai-tool__container\"\n );\n\n return ReactDOM.createPortal(content, container);\n};\n\nexport default UncachedAITool;\n","import React from \"react\";\n\nconst QuizBanner = ({ bannerContent }) => {\n return (\n <div className=\"lc-banner lc-banner-information quiz-banner\">\n <p\n dangerouslySetInnerHTML={{ __html: bannerContent }}\n className=\"banner-1 quiz-content\"\n />\n </div>\n );\n};\n\nexport default QuizBanner;\n","import classNames from \"classnames\";\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { QUIZ_ANSWER_STATES } from \"../constants\";\nimport QuizAnswerChoiceIcon from \"./QuizAnswerChoiceIcon\";\nimport ReviewButton from \"./ReviewButton\";\n\nfunction QuizAnswerChoice({\n answerLetter,\n answerText,\n isSelectedAnswer,\n state,\n setSelectedAnswer,\n isAnonUser,\n link,\n}) {\n const isSelected = isSelectedAnswer && state === QUIZ_ANSWER_STATES.UNLOCKED;\n\n const handleAnswerSelected = (event) => {\n if (\n (!isAnonUser && !event.key) ||\n event.key === \"Enter\" ||\n event.key === \" \"\n ) {\n setSelectedAnswer(answerLetter);\n }\n };\n\n const canBeTabbed =\n (state === QUIZ_ANSWER_STATES.UNLOCKED ||\n state === QUIZ_ANSWER_STATES.LOCKED) &&\n !isSelectedAnswer;\n\n const amplitudeEvent =\n state === QUIZ_ANSWER_STATES.LOCKED\n ? \"quizLockedAnswerChoice\"\n : \"quizUnlockedAnswerChoice\";\n\n const amplitudeFunnel = () => {\n if (state === QUIZ_ANSWER_STATES.UNLOCKED) {\n return \"none\";\n }\n if (isAnonUser) {\n return \"free\";\n }\n return \"paid\";\n };\n\n return (\n <div\n className={classNames(\"quiz-answer-choice\", state, {\n selected: isSelected,\n })}\n data-amplitude={amplitudeEvent}\n data-amplitude-funnel={amplitudeFunnel()}\n data-test={`QuizCardAnswerChoice-${answerLetter}`}\n onClick={handleAnswerSelected}\n onKeyPress={handleAnswerSelected}\n role=\"button\"\n tabIndex={canBeTabbed ? 0 : undefined}\n {...(isAnonUser\n ? { \"data-toggle\": \"modal\", \"data-target\": \"#quiz-free-tier .modal\" }\n : {})}\n >\n <QuizAnswerChoiceIcon answerLetter={answerLetter} state={state} />\n <div className=\"text-content-container\">\n <span\n className=\"response-text\"\n dangerouslySetInnerHTML={{ __html: answerText }}\n />\n <ReviewButton link={link} state={state} />\n </div>\n </div>\n );\n}\n\nconst propTypes = {\n link: PropTypes.string,\n answerLetter: PropTypes.string.isRequired,\n answerText: PropTypes.string.isRequired,\n state: PropTypes.oneOf(Object.values(QUIZ_ANSWER_STATES)).isRequired,\n setSelectedAnswer: PropTypes.func,\n isSelectedAnswer: PropTypes.bool,\n isAnonUser: PropTypes.bool.isRequired,\n};\n\nconst defaultProps = {\n link: undefined,\n setSelectedAnswer: () => {},\n isSelectedAnswer: false,\n};\n\nQuizAnswerChoice.propTypes = propTypes;\nQuizAnswerChoice.defaultProps = defaultProps;\n\nexport default QuizAnswerChoice;\n","import React from \"react\";\nimport Icon from \"../../shared/Icon\";\nimport { QUIZ_ANSWER_STATES } from \"../constants\";\n\nconst iconName = (state) => {\n switch (state) {\n case QUIZ_ANSWER_STATES.SKIPPED:\n case QUIZ_ANSWER_STATES.CORRECT:\n return \"checkmark-64\";\n case QUIZ_ANSWER_STATES.INCORRECT:\n return \"close-48\";\n case QUIZ_ANSWER_STATES.LOCKED:\n return \"lock-filled-48\";\n case QUIZ_ANSWER_STATES.DISABLED:\n case QUIZ_ANSWER_STATES.UNLOCKED:\n default:\n return \"\";\n }\n};\n\nfunction QuizAnswerChoiceIcon({ answerLetter, state }) {\n const icon = iconName(state);\n switch (state) {\n case QUIZ_ANSWER_STATES.UNLOCKED:\n case QUIZ_ANSWER_STATES.DISABLED:\n return <div className=\"button-1 quiz-button\">{answerLetter}</div>;\n case QUIZ_ANSWER_STATES.CORRECT:\n case QUIZ_ANSWER_STATES.INCORRECT:\n case QUIZ_ANSWER_STATES.SKIPPED:\n return (\n <div className=\"button-1 quiz-button\">\n <Icon name={icon} size=\"xs\" />\n </div>\n );\n case QUIZ_ANSWER_STATES.LOCKED:\n return (\n <div className=\"button-1 quiz-button\">\n <Icon name={icon} size=\"sm\" />\n </div>\n );\n default:\n return null;\n }\n}\n\nexport default QuizAnswerChoiceIcon;\n","import React, { useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport QuizAnswerChoice from \"./QuizAnswerChoice\";\nimport { QUIZ_ANSWER_STATES } from \"../constants\";\n\nconst propTypes = {\n answerOptions: PropTypes.arrayOf(\n PropTypes.shape({\n answerLetter: PropTypes.string.isRequired,\n answerText: PropTypes.string.isRequired,\n link: PropTypes.string,\n state: PropTypes.oneOf(Object.values(QUIZ_ANSWER_STATES)),\n })\n ).isRequired,\n locked: PropTypes.bool.isRequired,\n onAnswerSelect: PropTypes.func.isRequired,\n questionId: PropTypes.number.isRequired,\n questionIndex: PropTypes.number.isRequired,\n questionText: PropTypes.string.isRequired,\n questionTotal: PropTypes.number.isRequired,\n isAnonUser: PropTypes.bool.isRequired,\n};\n\nfunction QuizCard({\n answerOptions,\n locked,\n isAnonUser,\n onAnswerSelect,\n questionId,\n questionIndex,\n questionText,\n questionTotal,\n}) {\n const [selectedAnswer, setSelectedAnswer] = useState();\n\n const handleAnswerSelect = (answerLetter) => {\n if (!locked) {\n setSelectedAnswer(answerLetter);\n }\n\n onAnswerSelect(answerLetter);\n };\n\n return (\n <div className=\"quiz-card\" data-test={`QuizCard-${questionId}`}>\n <div className=\"quiz-question\">\n <h5\n className=\"title-5\"\n dangerouslySetInnerHTML={{ __html: questionText }}\n />\n <div>\n <span className=\"question-range\">\n {questionIndex} of {questionTotal}\n </span>\n </div>\n </div>\n <div className=\"answer-columns\">\n {answerOptions.map((answerOption) => {\n return (\n <div key={answerOption.answerLetter} className=\"answer-column\">\n <QuizAnswerChoice\n isAnonUser={isAnonUser}\n answerLetter={answerOption.answerLetter}\n answerText={answerOption.answerText}\n isSelectedAnswer={selectedAnswer === answerOption.answerLetter}\n setSelectedAnswer={handleAnswerSelect}\n state={locked ? QUIZ_ANSWER_STATES.LOCKED : answerOption.state}\n />\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\nQuizCard.propTypes = propTypes;\n\nexport default QuizCard;\n","import React, { useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport Icon from \"../../shared/Icon\";\nimport QuizAnswerChoice from \"./QuizAnswerChoice\";\nimport QuizCardResultText from \"./QuizCardResultText\";\nimport { QUIZ_ANSWER_STATES, QUIZ_RESULT_STATES } from \"../constants\";\n\nconst propTypes = {\n cardState: PropTypes.oneOf(Object.values(QUIZ_RESULT_STATES)).isRequired,\n answerOptions: PropTypes.arrayOf(\n PropTypes.shape({\n link: PropTypes.string,\n answerLetter: PropTypes.string,\n answerText: PropTypes.string.isRequired,\n state: PropTypes.oneOf(Object.values(QUIZ_ANSWER_STATES)).isRequired,\n })\n ).isRequired,\n questionId: PropTypes.number.isRequired,\n questionIndex: PropTypes.number.isRequired,\n questionText: PropTypes.string.isRequired,\n};\n\nconst defaultProps = {};\nfunction QuizCardResult({\n cardState,\n answerOptions,\n questionId,\n questionIndex,\n questionText,\n}) {\n const [bannerExpanded, setBannerExpanded] = useState(true);\n\n const toggleBanner = () => {\n setBannerExpanded(!bannerExpanded);\n };\n\n return (\n <div\n className={`quiz-card-result ${cardState}`}\n data-test={`QuizCardResult-${questionId}`}\n >\n {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */}\n <div\n onClick={toggleBanner}\n className={`banner ${\n bannerExpanded ? \"expanded\" : \"collapsed\"\n } ${cardState}`}\n >\n <h5 className=\"question-container\">\n <span className=\"question-index\">{questionIndex}. </span>\n <span dangerouslySetInnerHTML={{ __html: questionText }} />\n </h5>\n <div className=\"icon-container\">\n <Icon size=\"sm\" name={bannerExpanded ? \"up\" : \"down-48\"} />\n </div>\n </div>\n {bannerExpanded && (\n <div className={`answer-container ${cardState}`}>\n <QuizCardResultText cardState={cardState} />\n <div className=\"answer-columns\">\n {answerOptions.map((answerOption) => {\n return (\n <div key={answerOption.answerLetter} className=\"answer-column\">\n <QuizAnswerChoice\n link={answerOption.link}\n isSelectedAnswer={false}\n answerLetter={answerOption.answerLetter}\n answerText={answerOption.answerText}\n state={answerOption.state}\n />\n </div>\n );\n })}\n </div>\n </div>\n )}\n </div>\n );\n}\n\nQuizCardResult.propTypes = propTypes;\nQuizCardResult.defaultProps = defaultProps;\n\nexport default QuizCardResult;\n","import React from \"react\";\nimport { QUIZ_RESULT_STATES } from \"../constants\";\n\nfunction QuizCardResultText({ cardState }) {\n switch (cardState) {\n case QUIZ_RESULT_STATES.CORRECT:\n return (\n <p className=\"result-text\">\n Good work! Click “Review†to further understand the correct answer.\n </p>\n );\n case QUIZ_RESULT_STATES.INCORRECT:\n return (\n <p className=\"result-text\">\n You’ll get it next time! Click “Review†to understand the correct\n answer.\n </p>\n );\n case QUIZ_RESULT_STATES.SKIPPED:\n return (\n <p className=\"result-text\">\n You skipped this question. Click “Review†to understand the correct\n answer.\n </p>\n );\n default:\n return null;\n }\n}\n\nexport default QuizCardResultText;\n","import React from \"react\";\nimport { QUIZ_ANSWER_STATES } from \"../constants\";\n\nfunction ReviewButton({ state, link }) {\n switch (state) {\n case QUIZ_ANSWER_STATES.SKIPPED:\n case QUIZ_ANSWER_STATES.CORRECT:\n return (\n <a href={link} className=\"review-button btn btn-default btn-sm\">\n Review\n </a>\n );\n case QUIZ_ANSWER_STATES.INCORRECT:\n case QUIZ_ANSWER_STATES.LOCKED:\n case QUIZ_ANSWER_STATES.DISABLED:\n case QUIZ_ANSWER_STATES.UNLOCKED:\n default:\n return null;\n }\n}\n\nexport default ReviewButton;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport QuizCardResult from \"./QuizCard/QuizCardResult\";\nimport {\n ANSWER_OPTION_LETTERS,\n QUIZ_ANSWER_STATES,\n QUIZ_RESULT_STATES,\n} from \"./constants\";\nimport ResultsPanel from \"./ResultsPanel\";\n\nconst propTypes = {\n attemptCount: PropTypes.number.isRequired,\n locked: PropTypes.bool.isRequired,\n lockedRedirectUrl: PropTypes.string,\n previousPercentCorrect: PropTypes.number,\n quizSubmission: PropTypes.shape({\n correct: PropTypes.number,\n incorrect: PropTypes.number,\n skipped: PropTypes.number,\n percentCorrect: PropTypes.number,\n reviewLink: PropTypes.string,\n quizQuestions: PropTypes.arrayOf(\n PropTypes.shape({\n answerOptions: PropTypes.arrayOf(\n PropTypes.shape({\n answerLetter: PropTypes.oneOf(ANSWER_OPTION_LETTERS).isRequired,\n answerText: PropTypes.string.isRequired,\n link: PropTypes.string,\n state: PropTypes.oneOf(Object.values(QUIZ_ANSWER_STATES))\n .isRequired,\n })\n ),\n cardState: PropTypes.oneOf(Object.values(QUIZ_RESULT_STATES)),\n correctAnswerKey: PropTypes.oneOf(ANSWER_OPTION_LETTERS),\n id: PropTypes.number.isRequired,\n question: PropTypes.string,\n })\n ),\n }).isRequired,\n};\n\nconst defaultProps = {\n lockedRedirectUrl: null,\n previousPercentCorrect: null,\n};\n\nfunction QuizResult({\n attemptCount,\n quizSubmission,\n locked,\n lockedRedirectUrl,\n}) {\n const { quizQuestions } = quizSubmission;\n\n const handleRetake = () => {\n if (locked) {\n // TODO: Future story to launch paywall, for now, redirect\n window.location.href = lockedRedirectUrl;\n } else {\n window.location.href = `${window.location.pathname}?retake=1`;\n }\n };\n\n const amplitudeEvent = locked\n ? \"quizLockedRetakeButton\"\n : \"quizUnlockedRetakeButton\";\n const amplitudeFunnel = locked ? \"paid\" : \"none\";\n\n return (\n <div>\n <div className=\"summary-section-quiz--summary\">\n <ResultsPanel\n attemptCount={attemptCount}\n correct={quizSubmission.correct}\n incorrect={quizSubmission.incorrect}\n locked={locked}\n onRetakeClick={handleRetake}\n previousPercentCorrect={quizSubmission.previousPercentCorrect}\n reviewLink={quizSubmission.reviewLink}\n skipped={quizSubmission.skipped}\n />\n </div>\n <h4 className=\"quiz-questions-header title-6\">Your Answers</h4>\n <div className=\"quiz-questions\">\n {quizQuestions.map((quizQuestion, index) => {\n return (\n <QuizCardResult\n key={quizQuestion.id}\n answerOptions={quizQuestion.answerOptions}\n cardState={quizQuestion.cardState}\n questionId={quizQuestion.id}\n questionIndex={index + 1}\n questionText={quizQuestion.question}\n />\n );\n })}\n </div>\n <div className=\"summary-section-quiz--submit\">\n <button\n className=\"btn btn-a-plus button-1 btn-lg\"\n data-amplitude={amplitudeEvent}\n data-amplitude-funnel={amplitudeFunnel}\n data-test=\"QuizSubmitButton\"\n onClick={handleRetake}\n type=\"button\"\n >\n {locked && <i className=\"lc-icon lc-icon-lock-filled lc-icon-sm\" />}\n Retake Quiz\n </button>\n </div>\n </div>\n );\n}\n\nQuizResult.propTypes = propTypes;\nQuizResult.defaultProps = defaultProps;\n\nexport default QuizResult;\n","import React, { useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport pluralize from \"pluralize\";\nimport QuizCard from \"./QuizCard/QuizCard\";\nimport { QUIZ_ANSWER_STATES } from \"./constants\";\n\nconst propTypes = {\n attemptCount: PropTypes.number.isRequired,\n lastQuizSubmissionSummary: PropTypes.shape({\n correct: PropTypes.number,\n incorrect: PropTypes.number,\n skipped: PropTypes.number,\n percentCorrect: PropTypes.number,\n reviewLink: PropTypes.string,\n }),\n locked: PropTypes.bool.isRequired,\n lockedRedirectUrl: PropTypes.string,\n quizQuestions: PropTypes.arrayOf(\n PropTypes.shape({\n answerOptions: PropTypes.arrayOf(\n PropTypes.shape({\n answerLetter: PropTypes.string.isRequired,\n answerText: PropTypes.string.isRequired,\n state: PropTypes.oneOf([\n QUIZ_ANSWER_STATES.UNLOCKED,\n QUIZ_ANSWER_STATES.LOCKED,\n ]),\n })\n ),\n id: PropTypes.number.isRequired,\n question: PropTypes.string.isRequired,\n })\n ).isRequired,\n quizTitle: PropTypes.string.isRequired,\n submissionUrl: PropTypes.string.isRequired,\n isAnonUser: PropTypes.bool.isRequired,\n};\n\nconst defaultProps = {\n lastQuizSubmissionSummary: null,\n lockedRedirectUrl: null,\n};\n\nfunction QuizSubmission({\n attemptCount,\n lastQuizSubmissionSummary,\n locked,\n lockedRedirectUrl,\n quizQuestions,\n quizTitle,\n isAnonUser,\n submissionUrl,\n}) {\n const [isLoading, setIsLoading] = useState(false);\n const emptyQuestionsSubmission = quizQuestions.reduce(\n (acc, cur) => Object.assign(acc, { [cur.id]: null }),\n {}\n );\n const [quizQuestionsSubmission, setQuizQuestionsSubmission] = useState(\n emptyQuestionsSubmission\n );\n\n const handleLockedState = () => {\n window.location.href = lockedRedirectUrl;\n };\n\n const handleSubmit = () => {\n if (locked) {\n // TODO: Future story to paywall, for now, redirect\n handleLockedState();\n return;\n }\n\n const token = document.querySelector(\"meta[name='csrf-token']\").content;\n const reloadPath = window.location.href.split(\"?\")[0];\n const request = {\n method: \"POST\",\n headers: {\n \"X-CSRF-Token\": token,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n quiz_submission: {\n quiz_question_submissions_attributes: Object.keys(\n quizQuestionsSubmission\n ).map((key) => {\n return {\n quiz_question_id: key,\n chosen_answer: quizQuestionsSubmission[key],\n };\n }),\n },\n }),\n };\n\n setIsLoading(true);\n // eslint-disable-next-line compat/compat\n fetch(submissionUrl, request)\n .then((_response) => {\n window.location.href = reloadPath;\n })\n .catch((error) => {\n // TODO: Use toast notifications to indicate failure when it's available.\n console.error(\"Something went wrong.\", error);\n setIsLoading(false);\n alert(\"Something went wrong.\");\n });\n };\n\n const handleAnswerSelect = (chosenAnswer, questionId) => {\n if (locked) {\n handleLockedState();\n return;\n }\n const updatedSubmission = quizQuestionsSubmission;\n updatedSubmission[questionId] = chosenAnswer;\n setQuizQuestionsSubmission(updatedSubmission);\n };\n\n const amplitudeEvent = locked\n ? \"quizLockedSubmitButton\"\n : \"quizUnlockedSubmitButton\";\n\n const amplitudeFunnel = () => {\n if (!locked) {\n return \"none\";\n }\n if (isAnonUser) {\n return \"free\";\n }\n return \"paid\";\n };\n\n return (\n <div>\n <div className=\"summary-section-quiz--description body-2\">\n {attemptCount > 0\n ? `You took this quiz ${pluralize(\n \"time\",\n attemptCount,\n true\n )} before and got ${\n lastQuizSubmissionSummary.percentCorrect\n }% last time. Retake this quiz to see your new results.`\n : `Test your knowledge of ${quizTitle}. Submit your answers to see your results and get feedback.`}\n </div>\n <div className=\"quiz-questions\">\n {quizQuestions.map((quizQuestion, index) => {\n return (\n <QuizCard\n onAnswerSelect={(answerLetter) =>\n handleAnswerSelect(answerLetter, quizQuestion.id)\n }\n key={quizQuestion.id}\n answerOptions={quizQuestion.answerOptions}\n locked={locked}\n isAnonUser={isAnonUser}\n questionId={quizQuestion.id}\n questionIndex={index + 1}\n questionText={quizQuestion.question}\n questionTotal={quizQuestions.length}\n />\n );\n })}\n </div>\n <div className=\"summary-section-quiz--submit\">\n <button\n className=\"btn btn-a-plus button-1 btn-lg\"\n data-amplitude={amplitudeEvent}\n data-amplitude-funnel={amplitudeFunnel()}\n data-test=\"QuizSubmitButton\"\n disabled={isLoading}\n onClick={isAnonUser ? null : handleSubmit}\n type=\"button\"\n {...(isAnonUser\n ? {\n \"data-toggle\": \"modal\",\n \"data-target\": \"#quiz-free-tier .modal\",\n }\n : {})}\n >\n {locked && <i className=\"lc-icon lc-icon-lock-filled lc-icon-sm\" />}\n Submit\n </button>\n </div>\n </div>\n );\n}\n\nQuizSubmission.propTypes = propTypes;\nQuizSubmission.defaultProps = defaultProps;\n\nexport default QuizSubmission;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nconst propTypes = {\n attemptCount: PropTypes.number,\n correct: PropTypes.number.isRequired,\n incorrect: PropTypes.number.isRequired,\n locked: PropTypes.bool,\n onRetakeClick: PropTypes.func,\n previousPercentCorrect: PropTypes.number,\n reviewLink: PropTypes.string.isRequired,\n skipped: PropTypes.number.isRequired,\n};\n\nconst defaultProps = {\n attemptCount: 1,\n locked: false,\n onRetakeClick: () => {},\n previousPercentCorrect: null,\n};\n\nfunction Counter({ label, count }) {\n const className = label.toLowerCase();\n return (\n <div className=\"ResultsPanel--score\">\n <div className={`ResultsPanel--score-number ${className}`}>{count}</div>\n <span>{label}</span>\n </div>\n );\n}\n\nexport default function ResultsPanel({\n attemptCount,\n correct = 0,\n incorrect = 0,\n locked,\n onRetakeClick,\n previousPercentCorrect,\n reviewLink,\n skipped = 0,\n}) {\n const total = correct + incorrect + skipped;\n const percentCorrect = (correct / total) * 100;\n const roundedPercentage = Math.round(percentCorrect) || 0;\n const summaryText =\n attemptCount > 1\n ? `You got ${previousPercentCorrect}% correct last time.`\n : `You got ${correct} of ${total} correct.`;\n\n const amplitudeEvent = locked\n ? \"quizLockedRetakeButton\"\n : \"quizUnlockedRetakeButton\";\n const amplitudeFunnel = locked ? \"paid\" : \"none\";\n\n return (\n <div className=\"ResultsPanel--container\" data-test=\"QuizResultsPanel\">\n <div className=\"ResultsPanel--left-content\">\n <div className=\"ResultsPanel--left-percentage\">\n <span className=\"ResultsPanel--left-percentageText\">\n {roundedPercentage}%\n </span>\n </div>\n <div className=\"ResultsPanel--left-overview body-1\">\n <Counter count={correct} label=\"Correct\" />\n <Counter count={incorrect} label=\"Incorrect\" />\n {skipped > 0 && <Counter count={skipped} label=\"Skipped\" />}\n </div>\n </div>\n <div className=\"ResultsPanel--right-content\">\n <div>\n {summaryText} Keep going!{\" \"}\n <a href={reviewLink}>Review the summary & analysis</a>, retake\n this quiz, or review your answers below.\n </div>\n <div>\n <button\n className=\"ResultsPanel--right-btn btn btn-a-plus button-1 btn-lg\"\n data-amplitude={amplitudeEvent}\n data-amplitude-funnel={amplitudeFunnel}\n onClick={onRetakeClick}\n id=\"retake-quiz-button\"\n type=\"button\"\n >\n {locked && <i className=\"lc-icon lc-icon-lock-filled lc-icon-sm\" />}\n <span>Retake Quiz</span>\n </button>\n </div>\n </div>\n </div>\n );\n}\n\nResultsPanel.defaultProps = defaultProps;\nResultsPanel.propTypes = propTypes;\n","export const QUIZ_ANSWER_STATES = {\n UNLOCKED: \"unlocked\",\n LOCKED: \"locked\",\n CORRECT: \"correct\",\n INCORRECT: \"incorrect\",\n SKIPPED: \"skipped\",\n DISABLED: \"disabled\",\n};\n\nexport const QUIZ_RESULT_STATES = {\n CORRECT: \"correct\",\n INCORRECT: \"incorrect\",\n SKIPPED: \"skipped\",\n};\n\nexport const REUSABLES = {\n TITLE: \"title\",\n TOPIC: \"topic\",\n SUBTOPIC: \"subtopic\",\n};\n\nexport const ANSWER_OPTION_LETTERS = [\"a\", \"b\", \"c\", \"d\"];\n","import React from \"react\";\nimport MultiSelectRefinementList from \"components/search/base/MultiSelectRefinementList\";\nimport { authorEthnicities } from \"components/search/references/authorCategories\";\n\nconst AuthorEthnicityMultiSelect = () => {\n return (\n <MultiSelectRefinementList\n attribute=\"authorEthnicity\"\n categories={authorEthnicities}\n className=\"refinement-list__author-ethnicity\"\n id=\"refinement-list__author-ethnicity\"\n limit={100}\n name=\"refinement-list__author-ethnicity\"\n title=\"Ethnicity\"\n />\n );\n};\n\nexport default AuthorEthnicityMultiSelect;\n","import React from \"react\";\nimport MultiSelectRefinementList from \"components/search/base/MultiSelectRefinementList\";\nimport { authorGenders } from \"components/search/references/authorCategories\";\n\nconst AuthorGenderMultiSelect = () => {\n return (\n <MultiSelectRefinementList\n attribute=\"authorGender\"\n categories={authorGenders}\n className=\"refinement-list__author-gender\"\n id=\"refinement-list__author-gender\"\n limit={100}\n name=\"refinement-list__author-gender\"\n title=\"Gender\"\n />\n );\n};\n\nexport default AuthorGenderMultiSelect;\n","import React from \"react\";\nimport MultiSelectRefinementList from \"components/search/base/MultiSelectRefinementList\";\n\nconst AuthorNationalityMultiSelect = ({ countries }) => {\n return (\n <MultiSelectRefinementList\n attribute=\"authorNationality\"\n categories={countries}\n className=\"refinement-list__author-nationality\"\n id=\"refinement-list__author-nationality\"\n limit={100}\n name=\"refinement-list__author-nationality\"\n title=\"Nationality\"\n />\n );\n};\n\nexport default AuthorNationalityMultiSelect;\n","import React from \"react\";\nimport MultiSelectRefinementList from \"components/search/base/MultiSelectRefinementList\";\nimport genreCategories from \"components/search/references/genreCategories\";\n\nconst GenreMultiSelect = () => {\n return (\n <MultiSelectRefinementList\n attribute=\"genre\"\n categories={genreCategories}\n className=\"refinement-list__genre\"\n id=\"refinement-list__genre\"\n limit={100}\n name=\"refinement-list__genre\"\n title=\"Genre\"\n />\n );\n};\n\nexport default GenreMultiSelect;\n","import React from \"react\";\nimport RefinementList from \"components/search/base/RefinementList\";\nimport gradeLevelCategories from \"components/search/references/gradeLevelCategories\";\n\nconst GradeLevelRefinementList = () => {\n return (\n <RefinementList\n attribute=\"gradeLevel\"\n categories={gradeLevelCategories}\n limit={100}\n title=\"Grade Level\"\n />\n );\n};\n\nexport default GradeLevelRefinementList;\n","import React from \"react\";\nimport HierarchicalRefinementList from \"components/search/base/HierarchicalRefinementList\";\nimport guideCategories from \"components/search/references/guideCategories\";\n\nconst GuideRefinementList = () => {\n return (\n <HierarchicalRefinementList\n attribute=\"category\"\n categories={guideCategories}\n limit={20}\n title=\"Type of Guide\"\n />\n );\n};\n\nexport default GuideRefinementList;\n","import React from \"react\";\nimport RefinementList from \"components/search/base/RefinementList\";\nimport literaryMovementCategories from \"components/search/references/literaryMovementCategories\";\n\nconst LiteraryMovementRefinementList = () => {\n return (\n <RefinementList\n attribute=\"literaryMovement\"\n categories={literaryMovementCategories}\n limit={100}\n refinementLimit={3}\n title=\"Literary Movement\"\n />\n );\n};\n\nexport default LiteraryMovementRefinementList;\n","import React from \"react\";\nimport RefinementList from \"components/search/base/RefinementList\";\nimport literaryPeriodCategories from \"components/search/references/literaryPeriodCategories\";\n\nconst LiteraryPeriodRefinementList = () => {\n return (\n <RefinementList\n attribute=\"literaryPeriod\"\n categories={literaryPeriodCategories}\n limit={100}\n refinementLimit={3}\n title=\"Literary Period\"\n />\n );\n};\n\nexport default LiteraryPeriodRefinementList;\n","import React from \"react\";\nimport RefinementList from \"components/search/base/RefinementList\";\nimport timePeriodCategories from \"components/search/references/timePeriodCategories\";\n\nconst TimePeriodRefinementList = () => {\n return (\n <RefinementList\n attribute=\"timePeriod\"\n categories={timePeriodCategories}\n limit={100}\n refinementLimit={3}\n title=\"Time Period (When Written)\"\n />\n );\n};\n\nexport default TimePeriodRefinementList;\n","import React from \"react\";\nimport HierarchicalRefinementList from \"components/search/base/HierarchicalRefinementList\";\nimport typeCategories from \"components/search/references/typeCategories\";\n\nconst TypeHierarchicalRefinementList = () => {\n return (\n <HierarchicalRefinementList\n attribute=\"type\"\n categories={typeCategories}\n limit={50}\n title=\"Type of Work & Genre\"\n />\n );\n};\n\nexport default TypeHierarchicalRefinementList;\n","// List of currently selected refinements across all filters, shown at the top\n// of the search results. It becomes sticky when scrolling down far enough\n// and it expands/collapses dynamically based on the number of selected filters\n// and what the user is doing\n\nimport React, { useState, useRef, useEffect } from \"react\";\nimport { connectCurrentRefinements } from \"react-instantsearch-dom\";\n\nimport string from \"helpers/string\";\n\n// TODO interim: consolidate this with a master list of categories\nconst MAPPING = {\n \"Lit Guide > Lit Guide\": \"Lit Guides: Titles\",\n \"Lit Guide > Theme\": \"Lit Guides: Themes\",\n \"Lit Guide > Symbol\": \"Lit Guides: Symbols\",\n \"Lit Guide > Character\": \"Lit Guides: Characters\",\n \"Lit Guide > Term\": \"Lit Guides: Terms\",\n \"Lit Guide > Quotes\": \"Lit Guides: Quotes\",\n \"Lit Guide > Summary & Analysis\": \"Lit Guides: Summary & Analysis\",\n \"Lit Guide > Other\": \"Lit Guides: Other\",\n \"Lit Guide > Quiz\": \"Lit Guides: Quizzes\",\n \"Lit Guide > Lit Device\": \"Lit Guides: Literary Devices\",\n \"Poetry Guide > Poetry Guide\": \"Poetry Guides: Titles\",\n \"Poetry Guide > Theme\": \"Poetry Guides: Themes\",\n \"Poetry Guide > Symbol\": \"Poetry Guides: Symbols\",\n \"Poetry Guide > Poetic Device\": \"Poetry Guides: Poetic Devices\",\n \"Poetry Guide > Other\": \"Poetry Guides: Other\",\n \"Shakescleare > Shakescleare\": \"Shakescleare: Titles\",\n \"Shakescleare > Scene\": \"Shakescleare: Scenes\",\n \"Shakescleare > Other\": \"Shakescleare: Other\",\n \"Lit Term > Lit Term\": \"All Lit Terms\",\n \"Lit Terms > Other\": \"Lit Terms: Other\",\n \"Poetry > Lyric Poetry\": \"Lyric Poetry\",\n \"Poetry > Narrative Poetry\": \"Narrative Poetry\",\n \"Poetry > <n/a>\": \"Poetry: Other\",\n \"Prose Nonfiction > Autobiography / Memoir\": \"Autobiographies/Memoirs\",\n \"Prose Nonfiction > Biography\": \"Biographies\",\n \"Prose Nonfiction > Diary or Journal\": \"Diaries or Journals\",\n \"Prose Nonfiction > Document\": \"Documents\",\n \"Prose Nonfiction > Essay\": \"Essays\",\n \"Prose Nonfiction > Graphic Memoir / Biography\":\n \"Graphic Memoirs/Biographies\",\n \"Prose Nonfiction > History\": \"History\",\n \"Prose Nonfiction > Philosophy & Political Philosophy\":\n \"Philosophy & Political Philosophy\",\n \"Prose Nonfiction > Sermon, Speech, or Lecture\":\n \"Sermons, Speeches, or Lectures\",\n \"Prose Nonfiction > Sociology & Social Science\": \"Sociology & Social Science\",\n \"Prose Nonfiction > Theology\": \"Theology\",\n \"Prose Nonfiction > <n/a>\": \"Prose Nonfiction: Other\",\n \"Prose Fiction > Folktale, Fable, or Fairy Tale\":\n \"Folktales, Fables, or Fairy Tales\",\n \"Prose Fiction > Graphic Novel\": \"Graphic Novels\",\n \"Prose Fiction > Novel\": \"Novels\",\n \"Prose Fiction > Novella\": \"Novellas\",\n \"Prose Fiction > Short Story / Story Collection\":\n \"Short Stories/Story Collections\",\n \"Prose Fiction > <n/a>\": \"Other\",\n \"Play or Drama > Musical\": \"Musicals\",\n \"Play or Drama > One-Act Play\": \"One-Act Plays\",\n \"Play or Drama > Verse Drama\": \"Verse Dramas\",\n \"Play or Drama > <n/a>\": \"Play or Drama: Other\",\n \"Mythology > <n/a>\": \"Mythology: Other\",\n};\n\n// Each individual selected refinement\nconst CurrentRefinementPill = (props) => {\n return (\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions\n <div\n className=\"current-refinements__refinement\"\n onClick={() => props.refine(props.value)}\n >\n {props.text}\n <i className=\"lc-icon lc-icon-xs lc-icon-close\" />\n </div>\n );\n};\n\nconst getLabel = (label, item) => {\n if (item.attribute === \"literaryPeriod\") {\n return `${label.split(\" (\")[0]}...`;\n }\n if (item.attribute === \"gradeLevel\") {\n if (label === \"Higher education\") return label;\n return string.cardinalize(label);\n }\n if ([\"category\", \"type\"].indexOf(item.attribute) > -1) {\n return string.truncate(MAPPING[label] || \"UNLABELED\", 31);\n }\n\n return string.truncate(label, 31);\n};\n\nconst BOOTSTRAP_COL_PADDING = 30;\n\n// The current refinements container becomes fixed when scrolling down so it needs\n// a fixed pixel width\nconst handleResize = () => {\n $(\".current-refinements\").width(\n $(\".current-refinements\").parent().outerWidth() - BOOTSTRAP_COL_PADDING\n );\n};\n\nconst CurrentRefinements = (props) => {\n // If the current refinement is fixed to the top of the page\n const [isSticky, setIsSticky] = useState(false);\n\n // If current refinement is expanded to show all refinements or collapsed\n const [isExpanded, setIsExpanded] = useState(true);\n\n // Number of hidden refinements\n const [hiddenRefinements, setHiddenRefinements] = useState(0);\n\n const containerRef = useRef(null);\n const listRef = useRef(null);\n\n useEffect(() => {\n window.addEventListener(\"resize\", handleResize);\n\n handleResize();\n\n return function cleanup() {\n window.removeEventListener(\"resize\", handleResize);\n };\n }, []);\n\n useEffect(() => {\n window.addEventListener(\"scroll\", handleScroll, { passive: true });\n\n return function cleanup() {\n window.removeEventListener(\"scroll\", handleScroll);\n };\n }, [isSticky]);\n\n // Always expand list when an item is added/removed\n useEffect(() => {\n setIsExpanded(true);\n }, [props.items]);\n\n // When shrinking on scroll, set the hidden refinement count for the more button\n useEffect(() => {\n if (!isExpanded) {\n let count = 0;\n\n let top = -1;\n // eslint-disable-next-line no-restricted-syntax\n for (const child of listRef.current.children) {\n if (top < 0) {\n top = child.getBoundingClientRect().top;\n } else if (child.getBoundingClientRect().top > top) {\n count += 1;\n }\n }\n\n setHiddenRefinements(count);\n }\n }, [isExpanded]);\n\n // On scroll, handle sticky status of the refinement container\n const handleScroll = () => {\n if (containerRef.current) {\n if (isSticky) {\n setIsSticky($(\".search__searchbar\")[0].getBoundingClientRect().top < 0);\n } else {\n setIsSticky(containerRef.current.getBoundingClientRect().top <= 0);\n }\n }\n\n setIsExpanded(false);\n };\n\n const expandList = () => {\n setIsExpanded(true);\n };\n\n const itemsToRender = [];\n\n // The items array may have different children depending on the type of filter\n // and which filter is selected, this method covers each case\n props.items.forEach((item) => {\n let label;\n\n if (item.items) {\n item.items.forEach((refinement) => {\n label = getLabel(refinement.label, item);\n itemsToRender.push({ text: `${label}`, value: refinement.value });\n });\n } else if (Array.isArray(item.currentRefinement)) {\n item.currentRefinement.forEach((refinement) => {\n label = getLabel(refinement.label, item);\n itemsToRender.push({ text: label, value: item.value });\n });\n } else {\n label = getLabel(item.label, item);\n itemsToRender.push({ text: label, value: item.value });\n }\n });\n\n // Add extra CSS classes based on component state\n let containerClassName = \"current-refinements\";\n if (itemsToRender.length === 0) {\n containerClassName += \" current-refinements--empty\";\n } else if (isSticky) {\n containerClassName += \" current-refinements--sticky\";\n }\n\n let listClassName = \"current-refinements__list\";\n if (itemsToRender.length === 0) {\n listClassName += \" current-refinements__list--empty\";\n } else if (!isExpanded) {\n listClassName += \" current-refinements__list--shrunk\";\n }\n\n return (\n <div className={containerClassName} ref={containerRef}>\n {itemsToRender.length > 0 && (\n <div className=\"current-refinements__header\">Selected Filters</div>\n )}\n <div className=\"current-refinements__list-container\">\n <div className={listClassName} ref={listRef}>\n {itemsToRender.map((item) => {\n return (\n <CurrentRefinementPill\n key={item.text + item.label}\n refine={props.refine}\n text={item.text}\n value={item.value}\n />\n );\n })}\n </div>\n {hiddenRefinements > 0 && !isExpanded && (\n <div className=\"current-refinements__expand\">\n <button\n className=\"btn btn-text btn-sm\"\n onClick={expandList}\n type=\"button\"\n >\n <span className=\"hidden-xs\">{`+ ${hiddenRefinements} more`}</span>\n <span className=\"visible-xs hidden-sm\">{`+ ${hiddenRefinements}`}</span>\n </button>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default connectCurrentRefinements(CurrentRefinements);\n","// The refinement list that is toggled dynamically from the HierarchicalRefinementList\n// On desktop, it is shown on hover, on touch devices it is shown on touch\n// On mobile, it doesn't flyout but replaces the filter in the filter slideout\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { RefinementList } from \"components/search/base/RefinementList\";\nimport IconButton from \"components/shared/IconButton\";\nimport flyoutReference from \"components/search/references/flyoutReference\";\n\nconst propTypes = {\n attribute: PropTypes.string.isRequired,\n category: PropTypes.string.isRequired,\n hidden: PropTypes.bool,\n hideFlyout: PropTypes.func.isRequired,\n hideFlyoutHover: PropTypes.func.isRequired,\n refine: PropTypes.func.isRequired,\n};\n\nconst defaultProps = {\n hidden: true,\n};\n\nconst Flyout = (props) => {\n const categories =\n flyoutReference[flyoutReference.referenceMapping[props.category]];\n let className = \"refinement-list__flyout\";\n if (props.hidden) className += \" hidden\";\n\n let title = props.category;\n if ([\"Lit Guide\", \"Poetry Guide\", \"Lit Term\"].indexOf(title) > -1) {\n title = `${title}s`;\n }\n\n return (\n <div className={className} onMouseLeave={props.hideFlyoutHover}>\n <div className=\"refinement-list__flyout-header\">\n <IconButton\n btnClass=\"btn-sm btn-text\"\n iconClass=\"lc-icon-arrow-left lc-icon-xs\"\n onClick={props.hideFlyout}\n text=\"All filters\"\n />\n <h2>{props.category}</h2>\n </div>\n <RefinementList\n attribute={props.attribute}\n categories={categories}\n controlled\n currentRefinement={props.currentRefinement}\n items={props.items}\n refine={props.refine}\n />\n </div>\n );\n};\n\nFlyout.propTypes = propTypes;\nFlyout.defaultProps = defaultProps;\n\nexport default Flyout;\n","// Renders a list of categories as HierarchicalRefinementListElement with\n// accessible subcategories as Flyouts. Controls the Flyout state for all Flyouts\n// rendered by this component as well as callbacks for controlling them on\n// desktop/mobile\n\nimport React, { useEffect, useState } from \"react\";\nimport { connectRefinementList } from \"react-instantsearch-dom\";\nimport PropTypes from \"prop-types\";\n\nimport { XS_PIXEL_MAX } from \"constants/breakpoints\";\nimport HierarchicalRefinementListElement from \"components/search/base/HierarchicalRefinementListElement\";\n\nconst propTypes = {\n attribute: PropTypes.string.isRequired,\n categories: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n }).isRequired\n ).isRequired,\n items: PropTypes.array,\n refine: PropTypes.func.isRequired,\n title: PropTypes.string.isRequired,\n};\n\nconst defaultProps = {\n items: [],\n};\n\nconst HierarchicalRefinementList = (props) => {\n // Only one flyout can be visible at a time, this manages the state\n const [flyState, setFlyState] = useState(null);\n\n // Stores the internal state for all of the flyouts by category\n const [refinedValues, updateRefinedValue] = useState({});\n\n // Pass the internally stored refined values to Algolia\n useEffect(() => {\n props.refine([].concat(...Object.values(refinedValues)));\n }, [refinedValues]);\n\n const handleRefine = (values, category) => {\n updateRefinedValue((prevState) => ({ ...prevState, [category]: values }));\n };\n\n // Add events to manage showing/hiding flyouts\n useEffect(() => {\n if (flyState === null) {\n document.removeEventListener(\"click\", outsideFlyoutClickListener);\n document.removeEventListener(\"touchend\", outsideFlyoutClickListener);\n } else {\n document.addEventListener(\"click\", outsideFlyoutClickListener);\n document.addEventListener(\"touchend\", outsideFlyoutClickListener);\n }\n\n return function cleanup() {\n document.removeEventListener(\"click\", outsideFlyoutClickListener);\n document.removeEventListener(\"touchend\", outsideFlyoutClickListener);\n };\n }, [flyState]);\n\n const toggleFlyout = (category) => {\n if (category === null) {\n $(\".search__filters\").removeClass(\"search__filters--with-flyout\");\n } else {\n $(\".search__filters\").addClass(\"search__filters--with-flyout\");\n }\n\n setFlyState(category);\n };\n\n // Closes flyout if clicked outside of it\n const outsideFlyoutClickListener = (event) => {\n const $target = $(event.target);\n if (\n !$target.closest($(\".refinement-list__flyout\")).length &&\n $(\".refinement-list__flyout\").is(\":visible\")\n ) {\n toggleFlyout(null);\n }\n };\n\n // Closes flyout if hovered outside of it\n const outsideFlyoutHover = (event) => {\n // Hovers only registered on large size\n if (window.innerWidth <= XS_PIXEL_MAX) {\n return;\n }\n\n const $target = $(event.target);\n if (\n !$target.closest($(\".refinement-list__flyout\")).length &&\n $(\".refinement-list__flyout\").is(\":visible\")\n ) {\n toggleFlyout(null);\n }\n };\n\n return (\n <div className=\"refinement-list\" onMouseLeave={outsideFlyoutHover}>\n <div className=\"refinement-list__header\">{props.title}</div>\n <ul className=\"refinement-list__list refinement-list__list--hierarchical\">\n {props.categories.map((category) => {\n const items =\n props.items.filter(\n (i) => i.label.split(\" > \")[0] === category.value\n ) || [];\n const showFlyout = flyState === category.value;\n\n return (\n <HierarchicalRefinementListElement\n attribute={props.attribute}\n currentRefinement={props.currentRefinement}\n handleClick={toggleFlyout}\n handleRefine={handleRefine}\n items={items}\n key={category.value}\n label={category.label}\n showFlyout={showFlyout}\n value={category.value}\n />\n );\n })}\n </ul>\n </div>\n );\n};\n\nHierarchicalRefinementList.propTypes = propTypes;\nHierarchicalRefinementList.defaultProps = defaultProps;\n\nexport default connectRefinementList(HierarchicalRefinementList);\n","// Category within a HierarchicalRefinementList, triggers the respective flyout\n// on click/hover interactions\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { XS_PIXEL_MAX } from \"constants/breakpoints\";\nimport number from \"helpers/number\";\nimport Flyout from \"components/search/base/Flyout\";\n\nconst propTypes = {\n attribute: PropTypes.string.isRequired,\n handleClick: PropTypes.func,\n handleRefine: PropTypes.func.isRequired,\n items: PropTypes.array,\n label: PropTypes.string.isRequired,\n showFlyout: PropTypes.bool,\n value: PropTypes.string.isRequired,\n};\n\nconst defaultProps = {\n handleClick: () => {},\n items: [],\n showFlyout: false,\n};\n\nconst HierarchicalRefinementListElement = (props) => {\n // Set up count labels and respective CSS classes\n let itemsToCount = props.items.filter((item) => item.isRefined);\n const refinedCount = itemsToCount.length;\n\n if (refinedCount === 0) itemsToCount = props.items;\n\n const hitCount = itemsToCount.reduce(\n (accumulator, currentVal) => accumulator + currentVal.count,\n 0\n );\n let liClassName =\n \"refinement-list__element refinement-list__element--hierarchical\";\n\n if (hitCount === 0) liClassName += \" refinement-list__element--disabled\";\n if (props.showFlyout) liClassName += \" refinement-list__element--active\";\n\n let elementCountClassName = \"refinement-list__element-count\";\n if (refinedCount > 0)\n elementCountClassName += \" refinement-list__element-count--refined\";\n\n return (\n <li key={props.value} className={liClassName}>\n {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events */}\n <div\n className=\"refinement-list__element-subcontainer\"\n onMouseEnter={() => {\n if (window.innerWidth <= XS_PIXEL_MAX) {\n return;\n }\n props.handleClick(props.value);\n }}\n onClick={() => {\n props.handleClick(props.value);\n }}\n role=\"button\"\n tabIndex=\"-1\"\n >\n {props.label}\n <span className=\"refinement-list__element-right-side\">\n {refinedCount > 0 && (\n <span className=\"refinement-list__num-applied\">\n {refinedCount} applied\n </span>\n )}\n <span className={elementCountClassName}>\n {number.commaSeparateNumber(hitCount)}\n </span>\n <i className=\"lc-icon lc-icon-right lc-icon-xs refimement-list__expand-icon\" />\n </span>\n </div>\n\n <Flyout\n attribute={props.attribute}\n category={props.value}\n currentRefinement={props.currentRefinement}\n hidden={!props.showFlyout}\n hideFlyout={() => props.handleClick(null)}\n hideFlyoutHover={() => {\n if (window.innerWidth <= XS_PIXEL_MAX) {\n return;\n }\n\n props.handleClick(null);\n }}\n items={props.items}\n refine={props.handleRefine}\n />\n </li>\n );\n};\n\nHierarchicalRefinementListElement.propTypes = propTypes;\nHierarchicalRefinementListElement.defaultProps = defaultProps;\n\nexport default HierarchicalRefinementListElement;\n","// Individual search result\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport string from \"helpers/string\";\n\nconst propTypes = {\n hit: PropTypes.shape({\n category: PropTypes.string.isRequired,\n primaryTitle: PropTypes.string.isRequired,\n secondaryTitle: PropTypes.string,\n path: PropTypes.string.isRequired,\n blurb: PropTypes.string.isRequired,\n author: PropTypes.string,\n }).isRequired,\n isAPlus: PropTypes.bool,\n};\n\nconst defaultProps = {\n isAPlus: false,\n};\n\nconst Hit = ({ hit, isAPlus }) => {\n const title = hit.secondaryTitle\n ? `${hit.secondaryTitle} > ${hit.primaryTitle}`\n : hit.primaryTitle;\n const category = hit.category.split(\" > \")[1];\n\n let hitClass = \"hit-item\";\n let categoryClass = `category ${category\n .toLowerCase()\n .replace(\"&\", \"\")\n .replace(/[ ]+/g, \"-\")}`;\n let titleClass = \"title\";\n let blurbClass = \"\";\n let authorClass = \"search__hit-author\";\n\n let isBlurred = false;\n if (\n !isAPlus &&\n [\"Lit Guide\", \"Poetry Guide\", \"Shakescleare\", \"Lit Term\"].indexOf(\n category\n ) < 0\n ) {\n hitClass += \" blurred\";\n categoryClass += \" blurred\";\n titleClass += \" blurred-text\";\n blurbClass += \" blurred-text\";\n authorClass += \" blurred-text\";\n\n isBlurred = true;\n }\n\n return (\n <div className={hitClass}>\n {isBlurred ? (\n <div>\n <span className={categoryClass}>{category}</span>\n <span className={titleClass}>{title}</span>\n </div>\n ) : (\n <div>\n <a className={categoryClass} href={hit.path}>\n {category}\n </a>\n <a className={titleClass} href={hit.path}>\n {title}\n </a>\n </div>\n )}\n {category !== \"Lit Term\" && (\n <div className={authorClass}>by {hit.author}</div>\n )}\n <div className={blurbClass}>{string.htmlDecode(hit.blurb)}</div>\n </div>\n );\n};\n\nHit.propTypes = propTypes;\nHit.defaultProps = defaultProps;\n\nexport default Hit;\n","// List of search results\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport {\n connectHits,\n connectStateResults,\n Pagination,\n} from \"react-instantsearch-dom\";\n\nimport APlus from \"components/shared/dialogs/APlus\";\nimport Hit from \"components/search/base/Hit\";\nimport logo from \"images/reskin/small-logo-and-wordmark-a-plus.svg\";\nimport number from \"helpers/number\";\nimport NoResults from \"components/search/base/NoResults\";\n\nconst propTypes = {\n aPlusPromoUrl: PropTypes.string.isRequired,\n hits: PropTypes.array,\n isAPlus: PropTypes.bool,\n promoInfo: PropTypes.shape({\n characterCount: PropTypes.number,\n quoteCount: PropTypes.number,\n symbolCount: PropTypes.number,\n themeCount: PropTypes.number,\n quizCount: PropTypes.number,\n litDeviceCount: PropTypes.number,\n }).isRequired,\n userSignedIn: PropTypes.bool,\n};\n\nconst defaultProps = {\n hits: [],\n isAPlus: false,\n userSignedIn: false,\n};\n\nconst Paginate = connectStateResults(({ searchResults }) => {\n if (searchResults && searchResults.nbHits <= 20) return null;\n\n return (\n <div id=\"pagination\" className=\"lc-pagination\">\n <Pagination showLast />\n </div>\n );\n});\n\nconst PromoContent = connectStateResults(\n ({ promoInfo, searchResults, searchState }) => {\n const relatedText =\n (searchState.query || \"\").length > 0\n ? `related to ${searchState.query}`\n : \"related to your search\";\n const resultData = searchResults.disjunctiveFacets[0].data;\n return (\n <div>\n <div>\n Unlock <strong>Advanced Search</strong>. Get the power to{\" \"}\n <strong>refine</strong> your search and find <strong>related</strong>{\" \"}\n themes, symbols, characters, or quotes:\n </div>\n <ul>\n <li className=\"theme\">\n <strong>{`${number.commaSeparateNumber(\n promoInfo.themeCount\n )} themes`}</strong>{\" \"}\n ({number.commaSeparateNumber(resultData[\"Lit Guide > Theme\"] || 0)}{\" \"}\n {relatedText})\n </li>\n <li className=\"symbol\">\n <strong>{`${number.commaSeparateNumber(\n promoInfo.symbolCount\n )} symbols`}</strong>{\" \"}\n ({number.commaSeparateNumber(resultData[\"Lit Guide > Symbol\"] || 0)}{\" \"}\n {relatedText})\n </li>\n <li className=\"character\">\n <strong>{`${number.commaSeparateNumber(\n promoInfo.characterCount\n )} characters`}</strong>{\" \"}\n (\n {number.commaSeparateNumber(\n resultData[\"Lit Guide > Character\"] || 0\n )}{\" \"}\n {relatedText})\n </li>\n <li className=\"quotes\">\n <strong>{`${number.commaSeparateNumber(\n promoInfo.quoteCount\n )} quotes`}</strong>{\" \"}\n ({number.commaSeparateNumber(resultData[\"Lit Guide > Quotes\"] || 0)}{\" \"}\n {relatedText})\n </li>\n <li className=\"quizzes\">\n <strong>{`${number.commaSeparateNumber(\n promoInfo.quizCount\n )} quizzes`}</strong>{\" \"}\n (\n {number.commaSeparateNumber(resultData[\"Lit Guide > Quizzes\"] || 0)}{\" \"}\n {relatedText})\n </li>\n <li className=\"lit-devices\">\n <strong>{`${number.commaSeparateNumber(\n promoInfo.litDeviceCount\n )} literary devices`}</strong>{\" \"}\n (\n {number.commaSeparateNumber(\n resultData[\"Lit Guide > Lit Device\"] || 0\n )}{\" \"}\n {relatedText})\n </li>\n </ul>\n </div>\n );\n }\n);\n\nfunction Hits(props) {\n if (props.hits.length === 0) {\n return (\n <NoResults\n userSignedIn={props.userSignedIn}\n showRequestContentAfterDelay={props.showRequestContentAfterDelay}\n />\n );\n }\n\n // Set so only 1 promo can be visible at a time\n let shownPromo = false;\n return (\n <div id=\"hits\">\n {props.hits.map((hit) => {\n if (\n !props.isAPlus &&\n !shownPromo &&\n [\"Lit Guide\", \"Poetry Guide\", \"Shakescleare\", \"Lit Term\"].indexOf(\n hit.category.split(\" > \")[1]\n ) < 0\n ) {\n shownPromo = true;\n return (\n <div key={hit.objectID} className=\"hits__a-plus-container\">\n <div className=\"hits__a-plus-dialog\">\n <APlus\n amplitudeKey=\"advancedSearchCentralColumn\"\n href={props.aPlusPromoUrl}\n logoSrc={logo}\n isFreeTier={props.userSignedIn}\n >\n <PromoContent promoInfo={props.promoInfo} />\n </APlus>\n </div>\n <Hit hit={hit} isAPlus={props.isAPlus} />\n </div>\n );\n }\n\n return <Hit key={hit.objectID} hit={hit} isAPlus={props.isAPlus} />;\n })}\n <Paginate />\n </div>\n );\n}\n\nHits.propTypes = propTypes;\nHits.defaultProps = defaultProps;\n\nexport default connectHits(Hits);\n","// Wrapper of the MultiSelect component with added functionality to refine search\n// results on option select\n\nimport React from \"react\";\nimport { connectRefinementList } from \"react-instantsearch-dom\";\nimport PropTypes from \"prop-types\";\n\nimport promoAttributeReference from \"components/search/references/promoAttributeReference\";\nimport FilterPromoContext from \"components/search/context/FilterPromoContext\";\nimport MultiSelect from \"components/shared/MultiSelect\";\n\nconst propTypes = {\n attribute: PropTypes.string.isRequired,\n categories: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n }).isRequired\n ).isRequired,\n className: PropTypes.string,\n currentRefinement: PropTypes.array,\n id: PropTypes.string.isRequired,\n items: PropTypes.array,\n name: PropTypes.string.isRequired,\n refine: PropTypes.func.isRequired,\n title: PropTypes.string,\n\n //\n // Filter promo context props\n isAPlus: PropTypes.bool,\n setCurrentPromoAttribute: PropTypes.func.isRequired,\n};\n\nconst defaultProps = {\n className: \"\",\n isAPlus: false,\n items: [],\n title: null,\n};\n\nconst MultiSelectRefinementList = (props) => {\n const handleRefine = (selectedValues) => {\n if (!props.isAPlus) {\n props.setCurrentPromoAttribute(promoAttributeReference[props.attribute]);\n return;\n }\n\n props.refine((selectedValues || []).map(({ value }) => value));\n };\n\n const refinementClassName = `refinement-list ${props.className}`;\n\n const countedCategories = props.categories.map((cat) => {\n const { count } = props.items.find((i) => i.label === cat.value) || {\n count: 0,\n };\n return { ...cat, numResults: count };\n });\n\n return (\n <div className={refinementClassName}>\n {props.title && <div>{props.title}</div>}\n <MultiSelect\n id={props.id}\n isControlled\n name={props.name}\n onChange={handleRefine}\n options={countedCategories}\n preventSelect={!props.isAPlus}\n value={props.currentRefinement}\n />\n </div>\n );\n};\n\nconst MultiSelectRefinementListWithContext = (props) => {\n return (\n <FilterPromoContext.Consumer>\n {(filterPromoContextProps) => (\n <MultiSelectRefinementList {...props} {...filterPromoContextProps} />\n )}\n </FilterPromoContext.Consumer>\n );\n};\n\nMultiSelectRefinementList.propTypes = propTypes;\nMultiSelectRefinementList.defaultProps = defaultProps;\n\nexport default connectRefinementList(MultiSelectRefinementListWithContext);\n","// Rendered when there are no results from the search query\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport logo from \"images/reskin/small-logo-and-wordmark.png\";\nimport RequestContentModal from \"components/shared/RequestContentModal\";\n\nconst propTypes = {\n userSignedIn: PropTypes.bool,\n};\n\nconst defaultProps = {\n userSignedIn: false,\n};\n\nconst showRequestContentModal = () => {\n $(\"#request-content-modal\").modal(\"show\");\n};\n\nfunction NoResults(props) {\n return (\n <div className=\"no-results\">\n <div className=\"no-results__title\">No results found.</div>\n <div className=\"no-results__body text-center\">\n Please try another search or{\" \"}\n {props.userSignedIn ? (\n // eslint-disable-next-line jsx-a11y/anchor-is-valid\n <a\n href=\"#\"\n data-amplitude=\"searchNoResultsRequestGuide\"\n onClick={showRequestContentModal}\n >\n request a guide\n </a>\n ) : (\n // eslint-disable-next-line jsx-a11y/anchor-is-valid\n <a\n href=\"#\"\n data-amplitude=\"searchNoResultsRequestGuide\"\n data-toggle=\"modal\"\n data-target=\".registration-modal\"\n >\n request a guide\n </a>\n )}{\" \"}\n for us to cover.\n </div>\n <RequestContentModal\n logoUrl={logo}\n showAfterDelay={props.showRequestContentAfterDelay}\n />\n </div>\n );\n}\n\nNoResults.propTypes = propTypes;\nNoResults.defaultProps = defaultProps;\n\nexport default NoResults;\n","// Rendered within a refinement list and contains the checkbox that triggers the\n// refinement\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport number from \"helpers/number\";\nimport ControlledCheckbox from \"components/shared/ControlledCheckbox\";\n\nconst propTypes = {\n count: PropTypes.number,\n handleRefine: PropTypes.func.isRequired,\n isRefined: PropTypes.bool,\n Label: PropTypes.node.isRequired,\n refineable: PropTypes.bool,\n value: PropTypes.string.isRequired,\n};\n\nconst defaultProps = {\n count: 0,\n isRefined: false,\n refineable: false,\n};\n\nconst RefineElement = (props) => {\n const isDisabled = props.count === 0;\n\n let containerClassName = \"refine-element\";\n if (isDisabled) containerClassName += \" refine-element--disabled\";\n return (\n <div className={containerClassName}>\n <div className=\"refine-element__left\">\n <ControlledCheckbox\n checked={props.isRefined}\n disabled={isDisabled}\n name={props.value}\n onChange={(e) => {\n if (!props.refineable) {\n e.preventDefault();\n }\n props.handleRefine(props.value);\n }}\n >\n {props.Label}\n </ControlledCheckbox>\n </div>\n <span\n className={`refine-element__count${\n props.isRefined ? \" refine-element__count--refined\" : \"\"\n }`}\n >\n {number.commaSeparateNumber(props.count)}\n </span>\n </div>\n );\n};\n\nRefineElement.propTypes = propTypes;\nRefineElement.defaultProps = defaultProps;\n\nexport default RefineElement;\n","// A filter with a list of refineable values\n// The refine function is passed either from another local component\n// (like when the list is managed by the HierarchicalRefinementList)\n// - import { RefinementList } from \"RefinementList\"\n// or is passed directly by algolia via connectRefinementList\n// - import RefinementList from \"RefinementList\"\nimport React, { useEffect, useState } from \"react\";\nimport { connectRefinementList } from \"react-instantsearch-dom\";\nimport PropTypes from \"prop-types\";\nimport array from \"lodash/array\";\n\nimport promoAttributeReference from \"components/search/references/promoAttributeReference\";\nimport FilterPromoContext from \"components/search/context/FilterPromoContext\";\nimport RefineElement from \"components/search/base/RefineElement\";\n\nconst propTypes = {\n attribute: PropTypes.string,\n categories: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n }).isRequired\n ),\n currentRefinement: PropTypes.array,\n items: PropTypes.array,\n refine: PropTypes.func.isRequired,\n // Note that refinementLimit is specified internally while `limit` is specified by\n // the algolia API, which we are not using here\n refinementLimit: PropTypes.number,\n title: PropTypes.string,\n\n //\n // Filter promo context props\n //\n isAPlus: PropTypes.bool,\n setCurrentPromoAttribute: PropTypes.func.isRequired,\n};\n\nconst defaultProps = {\n attribute: null,\n categories: [],\n currentRefinement: [],\n isAPlus: false,\n items: [],\n refinementLimit: -1,\n title: null,\n};\n\nconst Label = ({ label, attribute }) => {\n if (attribute === \"literaryPeriod\") {\n const [label1, label2] = label.split(\"(\");\n return (\n <>\n {label1}\n <br />\n {`(${label2}`}\n </>\n );\n }\n\n return label;\n};\n\nconst isRefineable = (isAPlus, categoryValue) =>\n isAPlus ||\n [\n \"!Lit Guide\",\n \"!Poetry Guide\",\n \"!Shakescleare\",\n \"Lit Term > Lit Term\",\n ].indexOf(categoryValue) > -1;\n\nconst RefinementList = (props) => {\n // Used to show/hide long lists of refinements\n const [showAllRefinements, setShowAllRefinements] = useState(\n props.refinementLimit < 0\n );\n\n // Show only the number of categories specific by refinementLimit (or all if expanded)\n const [shownCategories, setShownCategories] = useState([]);\n\n // Refinements can be removed externally, like for instance if disabled when\n // no results are present. This keeps track of any refinements that need removing\n const [refinementsToRemove, setRefinementsToRemove] = useState([]);\n\n // Keeps track of what elements should be rendered\n const [renderElements, setRenderElements] = useState([]);\n\n // Updates shown categories when list is expanded/shrunk\n useEffect(() => {\n if (props.refinementLimit < 0 || showAllRefinements) {\n setShownCategories(props.categories);\n } else {\n setShownCategories(props.categories.slice(0, props.refinementLimit));\n }\n }, [showAllRefinements]);\n\n // Updates the shown list of categories when the list of items changes\n // items include things like if the category is refined and the number\n // of available refinements for that category\n useEffect(() => {\n // If the list of items is empty, it means that we have 0 results from search\n // so we should clear all selected refinements\n if (props.items.length === 0 && props.currentRefinement.length !== 0) {\n setRefinementsToRemove(props.categories.map(({ value }) => value));\n }\n\n setRenderElements(\n shownCategories.map((category) => {\n let resultCount = 0;\n let isRefined = false;\n\n if (category.value[0] === \"!\") {\n const refineableCategories = props.items.filter(\n (i) => i.label.split(\" > \")[0] === category.value.slice(1)\n );\n\n resultCount = refineableCategories.reduce(\n (acc, curr) => acc + curr.count,\n 0\n );\n\n if (\n refineableCategories.length > 0 &&\n refineableCategories.every((i) => i.isRefined)\n ) {\n isRefined = true;\n }\n } else {\n const result = props.items.filter(\n (i) => i.label === category.value\n )[0];\n if (result) {\n resultCount = result.count;\n isRefined = result.isRefined;\n }\n }\n\n if (isRefined && resultCount === 0 && category.value[0] !== \"!\") {\n setRefinementsToRemove((prevState) => {\n return array.uniq([...prevState, category.value]);\n });\n }\n\n const refineable = isRefineable(props.isAPlus, category.value);\n\n return (\n <RefineElement\n count={resultCount}\n key={category.value}\n Label={<Label label={category.label} attribute={props.attribute} />}\n handleRefine={handleRefine}\n isRefined={isRefined}\n refineable={refineable}\n value={category.value}\n />\n );\n })\n );\n }, [JSON.stringify(props.items), shownCategories.length]);\n\n // Clears any needed refinements\n useEffect(() => {\n if (refinementsToRemove.length === 0) return;\n if (\n array.intersection(refinementsToRemove, props.currentRefinement)\n .length === 0\n ) {\n setRefinementsToRemove([]);\n return;\n }\n props.refine(\n array.without(props.currentRefinement, ...refinementsToRemove)\n );\n setRefinementsToRemove([]);\n }, [JSON.stringify(refinementsToRemove)]);\n\n const handleRefine = (value) => {\n if (!isRefineable(props.isAPlus, value)) {\n props.setCurrentPromoAttribute(promoAttributeReference[props.attribute]);\n return;\n }\n\n // A value starting with ! indicates one of the \"All\" selections from the\n // flyout, so that's handled differently\n if (value[0] === \"!\") {\n const allCategories = props.categories\n .filter((ref) => ref.value !== value)\n .map((ref) => ref.value);\n\n if (allCategories.every((val) => props.currentRefinement.includes(val))) {\n props.refine(array.without(props.currentRefinement, ...allCategories));\n } else {\n // Unique to dedupe categories in case any are already selected when we\n // select all\n props.refine(\n array.uniq([...props.currentRefinement, ...allCategories])\n );\n }\n } else if (props.currentRefinement.indexOf(value) < 0) {\n props.refine([...props.currentRefinement, value]);\n } else {\n props.refine(props.currentRefinement.filter((c) => c !== value));\n }\n };\n\n const toggleShowAllRefinements = () => {\n setShowAllRefinements((showingRefiments) => !showingRefiments);\n };\n\n return (\n <div className=\"refinement-list\">\n {props.title && (\n <div className=\"refinement-list__header\">{props.title}</div>\n )}\n <ul className=\"refinement-list__list\">{renderElements}</ul>\n {props.refinementLimit > 0 && (\n <div className=\"refinement-list__expand-container\">\n <button\n className=\"btn btn-text btn-sm refinement-list__expand\"\n onClick={toggleShowAllRefinements}\n type=\"button\"\n >\n {showAllRefinements ? \"- Less\" : \"+ More\"}\n </button>\n </div>\n )}\n </div>\n );\n};\n\nRefinementList.propTypes = propTypes;\nRefinementList.defaultProps = defaultProps;\n\nconst RefinementListWithPromoContext = (props) => {\n return (\n <FilterPromoContext.Consumer>\n {(filterPromoContextProps) => (\n <RefinementList {...props} {...filterPromoContextProps} />\n )}\n </FilterPromoContext.Consumer>\n );\n};\n\n// Base RefinementList - pass in a refine function\nexport { RefinementListWithPromoContext as RefinementList };\n\n// Connected RefinementList - algolia passes in the refine function\nexport default connectRefinementList(RefinementListWithPromoContext);\n","// Creates a react context for managing the state of which mini promo is shown\n// on the filters\nimport React from \"react\";\n\nexport default React.createContext({\n currentPromoAttribute: null,\n isAPlus: false,\n setCurrentPromoAttribute: () => {},\n});\n","// Main component for the search page\n// Note that all algolia connected components using any of the connect methods\n// imported from \"react-instantsearch-dom\" must be rendered within the <InstantSearch />\n// component\n\nimport React, { useState } from \"react\";\nimport algoliasearch from \"algoliasearch\";\nimport {\n connectSearchBox,\n connectStateResults,\n InstantSearch,\n Stats,\n} from \"react-instantsearch-dom\";\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport PropTypes from \"prop-types\";\n\nimport logo from \"images/reskin/small-logo-a-plus.svg\";\nimport number from \"helpers/number\";\nimport AuthorEthnicityMultiSelect from \"components/search/AuthorEthnicityMultiSelect\";\nimport AuthorGenderMultiSelect from \"components/search/AuthorGenderMultiSelect\";\nimport AuthorNationalityMultiSelect from \"components/search/AuthorNationalityMultiSelect\";\nimport CurrentRefinements from \"components/search/base/CurrentRefinements\";\nimport FilterPromoContext from \"components/search/context/FilterPromoContext\";\nimport GenreMultiSelect from \"components/search/GenreMultiSelect\";\nimport GradeLevelRefinementList from \"components/search/GradeLevelRefinementList\";\nimport GuideRefinementList from \"components/search/GuideRefinementList\";\nimport Hits from \"components/search/base/Hits\";\nimport IconButton from \"components/shared/IconButton\";\nimport LiteraryMovementRefinementList from \"components/search/LiteraryMovementRefinementList\";\nimport LiteraryPeriodRefinementList from \"components/search/LiteraryPeriodRefinementList\";\nimport MiniAPlus from \"components/shared/dialogs/MiniAPlus\";\nimport TypeRefinementList from \"components/search/TypeRefinementList\";\nimport TimePeriodRefinementList from \"components/search/TimePeriodRefinementList\";\n\nconst SearchBox = connectSearchBox(({ currentRefinement, refine }) => {\n function refineSearch(event) {\n refine(event.currentTarget.value);\n }\n\n return (\n <>\n <i className=\"lc-icon lc-icon-search lc-icon-sm tw-text-gray tw-absolute tw-top-9 tw-ml-3 md:tw-top-12\" />\n <input\n className=\"input-lg search__searchbar !tw-pl-10\"\n onChange={refineSearch}\n placeholder=\"Search\"\n type=\"search\"\n value={currentRefinement}\n />\n </>\n );\n});\n\nconst propTypes = {\n algoliaAppId: PropTypes.string.isRequired,\n algoliaApiKey: PropTypes.string.isRequired,\n aPlusPromoUrl: PropTypes.string.isRequired,\n isAPlus: PropTypes.bool,\n metadataConstants: PropTypes.shape({\n countries: PropTypes.arrayOf(\n PropTypes.shape({ label: PropTypes.string, value: PropTypes.string })\n ),\n }).isRequired,\n query: PropTypes.string,\n userSignedIn: PropTypes.bool,\n showRequestContentAfterDelay: PropTypes.number,\n};\n\nconst defaultProps = {\n isAPlus: false,\n query: \"\",\n userSignedIn: false,\n showRequestContentAfterDelay: false,\n};\n\nconst SearchResults = connectStateResults(\n ({ isSearchStalled, props, showFilters }) => {\n // Loading\n if (isSearchStalled) {\n return \"Searching for results...\";\n }\n\n // No results\n return (\n <>\n <div className=\"search__mobile-filter-toggle search__results\">\n <Stats\n translations={{\n stats(nbHits) {\n return `${number.commaSeparateNumber(nbHits)} Results`;\n },\n }}\n />\n <IconButton\n btnClass=\"btn-md btn-default hits__show-filters\"\n iconClass=\"lc-icon-filters lc-icon-sm\"\n onClick={showFilters}\n text=\"Filter\"\n />\n </div>\n <CurrentRefinements />\n <div className=\"hidden-xs hidden-sm visible-md visible-lg visible-xl search__results\">\n <Stats\n translations={{\n stats(nbHits) {\n return `${number.commaSeparateNumber(nbHits)} Results`;\n },\n }}\n />\n </div>\n <Hits\n aPlusPromoUrl={props.aPlusPromoUrl}\n isAPlus={props.isAPlus}\n promoInfo={props.promoInfo}\n userSignedIn={props.userSignedIn}\n showRequestContentAfterDelay={props.showRequestContentAfterDelay}\n />\n </>\n );\n }\n);\n\nconst Search = (props) => {\n const [showMobileFilters, setShowMobileFilters] = useState(false);\n const [filterPromoContextState, setFilterPromoContextState] = useState({\n currentPromoAttribute: null,\n isAPlus: props.isAPlus,\n setCurrentPromoAttribute: (newPromoAttr) =>\n setFilterPromoContextState((prevState) => ({\n ...prevState,\n currentPromoAttribute: newPromoAttr,\n })),\n });\n\n const searchClient = algoliasearch(props.algoliaAppId, props.algoliaApiKey);\n\n function showFilters() {\n setShowMobileFilters(true);\n $(\"body\").append(\n \"<div class='search__filter-backdrop modal-backdrop' style='opacity: 0.5'></div>\"\n );\n // Bind both click and touchend events so it works on both touch and mouse\n document.addEventListener(\"click\", outsideFilterClickListener);\n document.addEventListener(\"touchend\", outsideFilterClickListener);\n }\n\n function hideFilters() {\n setShowMobileFilters(false);\n $(\".search__filter-backdrop\").remove();\n document.removeEventListener(\"click\", outsideFilterClickListener);\n document.removeEventListener(\"touchend\", outsideFilterClickListener);\n }\n\n const outsideFilterClickListener = (event) => {\n const $target = $(event.target);\n if (\n // Clicking on a select option or on the mini promo close button doesn't\n // find search__filters in its ancestor list, probably because they are closed\n // before this method can run, so we specifically exclude them from the check\n !event.target.classList.contains(\"lc-select__option\") &&\n !event.target.classList.contains(\"lc-select__option--inner\") &&\n !event.target.classList.contains(\"lc-icon-close\") &&\n !event.target.classList.contains(\"lc-select__multi-value\") &&\n !event.target.classList.contains(\"lc-select__multi-value__label\") &&\n !$target.closest($(\".search__filters\")).length &&\n $(\".search__filters\").is(\":visible\")\n ) {\n hideFilters();\n }\n };\n\n function closeMiniPromo() {\n filterPromoContextState.setCurrentPromoAttribute(null);\n }\n\n // Renders the mini promo to be shown on top of each set of filters when a\n // non a-plus user interacts with them\n const showMiniAplusPromo = (attr) => {\n const { isAPlus, currentPromoAttribute } = filterPromoContextState;\n if (!currentPromoAttribute) return null;\n\n const { value } = currentPromoAttribute;\n if (isAPlus || value !== attr) return null;\n\n return (\n <MiniAPlus\n handleClose={closeMiniPromo}\n href={props.aPlusPromoUrl}\n logoSrc={logo}\n shouldRenderCloseBtn\n userSignedIn={props.userSignedIn}\n >\n Upgrade to access these filters\n </MiniAPlus>\n );\n };\n\n return (\n <div className=\"container\">\n <div className=\"row\">\n <InstantSearch searchClient={searchClient} indexName=\"litcharts_things\">\n <div\n className={`search__filters ${\n showMobileFilters && \"search__filters--visible\"\n } col-md-4 col-lg-3`}\n >\n <div className=\"search-filters__inner-container\">\n <FilterPromoContext.Provider value={filterPromoContextState}>\n <h2>Filter your search</h2>\n <div className=\"search__filter-group\">\n {showMiniAplusPromo(\"category\")}\n <GuideRefinementList />\n </div>\n <div className=\"search__filter-group\">\n {showMiniAplusPromo(\"type\")}\n <TypeRefinementList />\n <GenreMultiSelect />\n </div>\n <div className=\"search__filter-group\">\n {showMiniAplusPromo(\"timePeriod\")}\n <TimePeriodRefinementList />\n </div>\n <div className=\"search__filter-group\">\n {showMiniAplusPromo(\"literaryPeriod\")}\n <LiteraryPeriodRefinementList />\n </div>\n <div className=\"search__filter-group\">\n {showMiniAplusPromo(\"literaryMovement\")}\n <LiteraryMovementRefinementList />\n </div>\n <div className=\"search__filter-group search__filter-group-author\">\n <div className=\"refinement-list__header\">Author Context</div>\n {showMiniAplusPromo(\"author\")}\n <AuthorNationalityMultiSelect\n countries={props.metadataConstants.countries}\n />\n <AuthorEthnicityMultiSelect />\n <AuthorGenderMultiSelect />\n </div>\n <div className=\"search__filter-group\">\n {showMiniAplusPromo(\"gradeLevel\")}\n <GradeLevelRefinementList />\n </div>\n </FilterPromoContext.Provider>\n </div>\n </div>\n <div className=\"col-xs-12 col-sm-12 col-md-8 col-lg-offset-1 col-lg-8\">\n <SearchBox defaultRefinement={props.query} />\n <SearchResults {...props} showFilters={showFilters} />\n </div>\n </InstantSearch>\n </div>\n </div>\n );\n};\n\nSearch.propTypes = propTypes;\nSearch.defaultProps = defaultProps;\n\nexport default Search;\n","export const authorGenders = [\n {\n label: \"Female\",\n value: \"Female\",\n },\n {\n label: \"Male\",\n value: \"Male\",\n },\n {\n label: \"Nonbinary\",\n value: \"Nonbinary\",\n },\n];\n\nexport const authorEthnicities = [\n {\n label: \"Asian\",\n value: \"Asian\",\n },\n {\n label: \"Black or African American\",\n value: \"Black or African American\",\n },\n {\n label: \"Hispanic or LatinX\",\n value: \"Hispanic or LatinX\",\n },\n {\n label: \"Indigenous Australian\",\n value: \"Indigenous Australian\",\n },\n {\n label: \"Middle Eastern\",\n value: \"Middle Eastern\",\n },\n {\n label: \"Native American or Alaska Native\",\n value: \"Native American or Alaska Native\",\n },\n {\n label: \"Native Hawaiian or other Pacific Islander\",\n value: \"Native Hawaiian or other Pacific Islander\",\n },\n {\n label: \"White\",\n value: \"White\",\n },\n];\n","// Main reference for the flyouts. A category value starting with \"!\" is not actually\n// refined but triggers a refinement for all the other related categories\nexport default {\n referenceMapping: {\n \"Lit Guide\": \"litGuideReference\",\n \"Poetry Guide\": \"poetryGuideReference\",\n Shakescleare: \"shakesReference\",\n \"Lit Term\": \"litTermReference\",\n \"Prose Fiction\": \"proseFictionReference\",\n \"Prose Nonfiction\": \"proseNonfictionReference\",\n Poetry: \"poetryReference\",\n \"Play or Drama\": \"playDramaReference\",\n Mythology: \"mythologyReference\",\n },\n litGuideReference: [\n {\n label: \"All Lit Guides\",\n value: \"!Lit Guide\",\n },\n {\n label: \"Titles\",\n value: \"Lit Guide > Lit Guide\",\n },\n {\n label: \"Themes\",\n value: \"Lit Guide > Theme\",\n },\n {\n label: \"Symbols\",\n value: \"Lit Guide > Symbol\",\n },\n {\n label: \"Characters\",\n value: \"Lit Guide > Character\",\n },\n {\n label: \"Terms\",\n value: \"Lit Guide > Term\",\n },\n {\n label: \"Quotes\",\n value: \"Lit Guide > Quotes\",\n },\n {\n label: \"Summary & Analysis\",\n value: \"Lit Guide > Summary & Analysis\",\n },\n {\n label: \"Quizzes\",\n value: \"Lit Guide > Quiz\",\n },\n {\n label: \"Literary Devices\",\n value: \"Lit Guide > Lit Device\",\n },\n ],\n poetryGuideReference: [\n {\n label: \"All Poetry Guides\",\n value: \"!Poetry Guide\",\n },\n {\n label: \"Titles\",\n value: \"Poetry Guide > Poetry Guide\",\n },\n {\n label: \"Themes\",\n value: \"Poetry Guide > Theme\",\n },\n {\n label: \"Symbols\",\n value: \"Poetry Guide > Symbol\",\n },\n {\n label: \"Poetic Devices\",\n value: \"Poetry Guide > Poetic Device\",\n },\n ],\n shakesReference: [\n {\n label: \"All Shakescleare\",\n value: \"!Shakescleare\",\n },\n {\n label: \"Titles\",\n value: \"Shakescleare > Shakescleare\",\n },\n {\n label: \"Scenes\",\n value: \"Shakescleare > Scene\",\n },\n ],\n litTermReference: [\n {\n label: \"All Lit Terms\",\n value: \"Lit Term > Lit Term\",\n },\n ],\n proseFictionReference: [\n {\n label: \"All Prose Fiction\",\n value: \"!Prose Fiction\",\n },\n {\n label: \"Folktales, Fables, or Fairy Tales\",\n value: \"Prose Fiction > Folktale, Fable, or Fairy Tale\",\n },\n {\n label: \"Graphic Novels\",\n value: \"Prose Fiction > Graphic Novel\",\n },\n {\n label: \"Novels\",\n value: \"Prose Fiction > Novel\",\n },\n {\n label: \"Novellas\",\n value: \"Prose Fiction > Novella\",\n },\n {\n label: \"Short Stories/Story Collections\",\n value: \"Prose Fiction > Short Story / Story Collection\",\n },\n {\n label: \"Other\",\n value: \"Prose Fiction > <n/a>\",\n },\n ],\n proseNonfictionReference: [\n {\n label: \"All Prose Nonfiction\",\n value: \"!Prose Nonfiction\",\n },\n {\n label: \"Autobiographies/Memoirs\",\n value: \"Prose Nonfiction > Autobiography / Memoir\",\n },\n {\n label: \"Biographies\",\n value: \"Prose Nonfiction > Biography\",\n },\n {\n label: \"Diaries or Journals\",\n value: \"Prose Nonfiction > Diary or Journal\",\n },\n {\n label: \"Documents\",\n value: \"Prose Nonfiction > Document\",\n },\n {\n label: \"Essays\",\n value: \"Prose Nonfiction > Essay\",\n },\n {\n label: \"Graphic Memoirs/Biographies\",\n value: \"Prose Nonfiction > Graphic Memoir / Biography\",\n },\n {\n label: \"History\",\n value: \"Prose Nonfiction > History\",\n },\n {\n label: \"Philosophy & Political Philosophy\",\n value: \"Prose Nonfiction > Philosophy & Political Philosophy\",\n },\n {\n label: \"Sermons, Speeches, or Lectures\",\n value: \"Prose Nonfiction > Sermon, Speech, or Lecture\",\n },\n {\n label: \"Sociology & Social Science\",\n value: \"Prose Nonfiction > Sociology & Social Science\",\n },\n {\n label: \"Theology\",\n value: \"Prose Nonfiction > Theology\",\n },\n {\n label: \"Other\",\n value: \"Prose Nonfiction > <n/a>\",\n },\n ],\n poetryReference: [\n {\n label: \"All Poetry\",\n value: \"!Poetry\",\n },\n {\n label: \"Lyric Poetry\",\n value: \"Poetry > Lyric Poetry\",\n },\n {\n label: \"Narrative Poetry\",\n value: \"Poetry > Narrative Poetry\",\n },\n {\n label: \"Other\",\n value: \"Poetry > <n/a>\",\n },\n ],\n playDramaReference: [\n {\n label: \"All Plays/Drama\",\n value: \"!Play or Drama\",\n },\n {\n label: \"Musicals\",\n value: \"Play or Drama > Musical\",\n },\n {\n label: \"One-Act Plays\",\n value: \"Play or Drama > One-Act Play\",\n },\n {\n label: \"Verse Dramas\",\n value: \"Play or Drama > Verse Drama\",\n },\n {\n label: \"Other\",\n value: \"Play or Drama > <n/a>\",\n },\n ],\n mythologyReference: [\n {\n label: \"All Mythology\",\n value: \"!Mythology\",\n },\n {\n label: \"Other\",\n value: \"Mythology > <n/a>\",\n },\n ],\n};\n","export default [\n {\n label: \"Allegory\",\n value: \"Allegory\",\n },\n {\n label: \"Ars poetica\",\n value: \"Ars poetica\",\n },\n {\n label: \"Aubade\",\n value: \"Aubade\",\n },\n {\n label: \"Bildungsroman/Coming-of-Age\",\n value: \"Bildungsroman / Coming-of-Age\",\n },\n {\n label: \"Blason\",\n value: \"Blason\",\n },\n {\n label: \"Cento\",\n value: \"Cento\",\n },\n {\n label: \"Colonial Literature\",\n value: \"Colonial Literature\",\n },\n {\n label: \"Comedy\",\n value: \"Comedy\",\n },\n {\n label: \"Comedy of Manners\",\n value: \"Comedy of Manners\",\n },\n {\n label: \"Crime/True Crime\",\n value: \"Crime / True Crime\",\n },\n {\n label: \"Dirge\",\n value: \"Dirge\",\n },\n {\n label: \"Dramatic monologue\",\n value: \"Dramatic monologue\",\n },\n {\n label: \"Dystopian\",\n value: \"Dystopian\",\n },\n {\n label: \"Eclogue\",\n value: \"Eclogue\",\n },\n {\n label: \"Ekphrasis\",\n value: \"Ekphrasis\",\n },\n {\n label: \"Elegy\",\n value: \"Elegy\",\n },\n {\n label: \"Epic\",\n value: \"Epic\",\n },\n {\n label: \"Epigram\",\n value: \"Epigram\",\n },\n {\n label: \"Epistolary\",\n value: \"Epistolary\",\n },\n {\n label: \"Epitaph\",\n value: \"Epitaph\",\n },\n {\n label: \"Epithalamion\",\n value: \"Epithalamion\",\n },\n {\n label: \"Fantasy\",\n value: \"Fantasy\",\n },\n {\n label: \"Farce\",\n value: \"Farce\",\n },\n {\n label: \"Georgic\",\n value: \"Georgic\",\n },\n {\n label: \"Gothic\",\n value: \"Gothic\",\n },\n {\n label: \"Historical Fiction\",\n value: \"Historical Fiction\",\n },\n {\n label: \"History Play/Historical Drama\",\n value: \"History Play / Historical Drama\",\n },\n {\n label: \"Horror\",\n value: \"Horror\",\n },\n {\n label: \"Hymn\",\n value: \"Hymn\",\n },\n {\n label: \"Idyll\",\n value: \"Idyll\",\n },\n {\n label: \"Kunstlerroman\",\n value: \"Kunstlerroman\",\n },\n {\n label: \"Lament\",\n value: \"Lament\",\n },\n {\n label: \"Light verse\",\n value: \"Light verse\",\n },\n {\n label: \"Mock-Epic\",\n value: \"Mock-Epic\",\n },\n {\n label: \"Morality or Mystery Play\",\n value: \"Morality or Mystery Play\",\n },\n {\n label: \"Mystery\",\n value: \"Mystery\",\n },\n {\n label: \"Nature/Environmental Writing\",\n value: \"Nature/Environmental Writing\",\n },\n {\n label: \"Novel of Ideas\",\n value: \"Novel of Ideas\",\n },\n {\n label: \"Novel of Manners\",\n value: \"Novel of Manners\",\n },\n {\n label: \"Ode\",\n value: \"Ode\",\n },\n {\n label: \"Other\",\n value: \"<n/a>\",\n },\n {\n label: \"Paean\",\n value: \"Paean\",\n },\n {\n label: \"Palinode\",\n value: \"Palinode\",\n },\n {\n label: \"Panegyric\",\n value: \"Panegyric\",\n },\n {\n label: \"Parody\",\n value: \"Parody\",\n },\n {\n label: \"Pastoral\",\n value: \"Pastoral\",\n },\n {\n label: \"Philosophical Fiction\",\n value: \"Philosophical Fiction\",\n },\n {\n label: \"Picaresque\",\n value: \"Picaresque\",\n },\n {\n label: \"Problem Play\",\n value: \"Problem Play\",\n },\n {\n label: \"Psalm\",\n value: \"Psalm\",\n },\n {\n label: \"Quest\",\n value: \"Quest\",\n },\n {\n label: \"Religious Fiction\",\n value: \"Religious Fiction\",\n },\n {\n label: \"Revenge Tragedy\",\n value: \"Revenge Tragedy\",\n },\n {\n label: \"Riddle\",\n value: \"Riddle\",\n },\n {\n label: \"Romance\",\n value: \"Romance\",\n },\n {\n label: \"Satire\",\n value: \"Satire\",\n },\n {\n label: \"Science Fiction\",\n value: \"Science Fiction\",\n },\n {\n label: \"Science Writing\",\n value: \"Science Writing\",\n },\n {\n label: \"Sensation Fiction\",\n value: \"Sensation Fiction\",\n },\n {\n label: \"Slave Narrative\",\n value: \"Slave Narrative\",\n },\n {\n label: \"Socratic Dialogue\",\n value: \"Socratic Dialogue\",\n },\n {\n label: \"Southern Gothic\",\n value: \"Southern Gothic\",\n },\n {\n label: \"Suspense/Thriller\",\n value: \"Suspense / Thriller\",\n },\n {\n label: \"Tragedy\",\n value: \"Tragedy\",\n },\n {\n label: \"Tragicomedy\",\n value: \"Tragicomedy\",\n },\n {\n label: \"Utopian\",\n value: \"Utopian\",\n },\n {\n label: \"Verse Epistle\",\n value: \"Verse Epistle\",\n },\n {\n label: \"Verse Novel\",\n value: \"Verse Novel\",\n },\n {\n label: \"Western/Frontier\",\n value: \"Western / Frontier\",\n },\n];\n","export default [\n {\n label: \"4th\",\n value: \"4\",\n },\n {\n label: \"5th\",\n value: \"5\",\n },\n {\n label: \"6th\",\n value: \"6\",\n },\n {\n label: \"7th\",\n value: \"7\",\n },\n {\n label: \"8th\",\n value: \"8\",\n },\n {\n label: \"9th\",\n value: \"9\",\n },\n {\n label: \"10th\",\n value: \"10\",\n },\n {\n label: \"11th\",\n value: \"11\",\n },\n {\n label: \"12th\",\n value: \"12\",\n },\n {\n label: \"Higher education\",\n value: \"Higher education\",\n },\n];\n","export default [\n {\n label: \"Lit Guides\",\n value: \"Lit Guide\",\n },\n {\n label: \"Poetry Guides\",\n value: \"Poetry Guide\",\n },\n {\n label: \"Shakescleare\",\n value: \"Shakescleare\",\n },\n {\n label: \"Lit Terms\",\n value: \"Lit Term\",\n },\n];\n","export default [\n {\n label: \"Absurdism\",\n value: \"Absurdism\",\n },\n {\n label: \"Aestheticism\",\n value: \"Aestheticism\",\n },\n {\n label: \"Beat Generation\",\n value: \"Beat Generation\",\n },\n {\n label: \"Black Arts Movement\",\n value: \"Black Arts Movement\",\n },\n {\n label: \"Cavalier Poets\",\n value: \"Cavalier Poets\",\n },\n {\n label: \"Confessionalists\",\n value: \"Confessionalists\",\n },\n {\n label: \"Dadaism\",\n value: \"Dadaism\",\n },\n {\n label: \"Existentialism\",\n value: \"Existentialism\",\n },\n {\n label: \"Expressionism\",\n value: \"Expressionism\",\n },\n {\n label: \"Feminism\",\n value: \"Feminism\",\n },\n {\n label: \"Imagism\",\n value: \"Imagism\",\n },\n {\n label: \"Magical Realism\",\n value: \"Magical Realism\",\n },\n {\n label: \"Metaphysical Poets\",\n value: \"Metaphysical Poets\",\n },\n {\n label: \"Modernism\",\n value: \"Modernism\",\n },\n {\n label: \"Neoclassicism\",\n value: \"Neoclassicism\",\n },\n {\n label: \"Naturalism\",\n value: \"Naturalism\",\n },\n {\n label: \"New York School\",\n value: \"New York School\",\n },\n {\n label: \"Postcolonialism\",\n value: \"Postcolonialism\",\n },\n {\n label: \"Postmodernism\",\n value: \"Postmodernism\",\n },\n {\n label: \"Pre-Raphaelites\",\n value: \"Pre-Raphaelites\",\n },\n {\n label: \"Realism\",\n value: \"Realism\",\n },\n {\n label: \"Romanticism\",\n value: \"Romanticism\",\n },\n {\n label: \"Socialism / Marxism\",\n value: \"Socialism / Marxism\",\n },\n {\n label: \"Surrealism\",\n value: \"Surrealism\",\n },\n {\n label: \"Symbolism\",\n value: \"Symbolism\",\n },\n {\n label: \"Transcendentalism\",\n value: \"Transcendentalism\",\n },\n];\n","export default [\n {\n label: \"Ancient Near East Literature (2600 BCE–330 BCE)\",\n value: \"Ancient Near East Literature (2600 BCE-330 BCE)\",\n },\n {\n label: \"Ancient Greek and Roman Period (800 BCE–500 AD)\",\n value: \"Ancient Greek and Roman Period (800 BCE-500 AD)\",\n },\n {\n label: \"Chinese Spring and Autumn Period (771 BCE–476 BCE)\",\n value: \"Chinese Spring and Autumn Period (771 BCE-476 BCE)\",\n },\n {\n label: \"Ancient Indian Literature (Before 500)\",\n value: \"Ancient Indian Literature (Before 500)\",\n },\n {\n label: \"Pre-Colonial African Period (Before 1500)\",\n value: \"Pre-Colonial African Period (Before 1500)\",\n },\n {\n label: \"Pre-Conquest South American Period (Before 1492)\",\n value: \"Pre-Conquest South American Period (Before 1492)\",\n },\n {\n label: \"Old English Period (450–1066)\",\n value: \"Old English Period (450-1066)\",\n },\n {\n label: \"Medieval European period (500–1500)\",\n value: \"Medieval European period (500-1500)\",\n },\n {\n label: \"Japanese Heian Period (794–1185)\",\n value: \"Japanese Heian Period (794-1185)\",\n },\n {\n label: \"Middle English Period (1066–1500)\",\n value: \"Middle English Period (1066-1500)\",\n },\n {\n label: \"The Renaissance (1300–1660)\",\n value: \"The Renaissance (1300-1660)\",\n },\n {\n label: \"English Renaissance (1485–1660)\",\n value: \"English Renaissance (1485-1660)\",\n },\n {\n label: \"The Spanish Golden Age (1556–1659)\",\n value: \"The Spanish Golden Age (1556-1659)\",\n },\n {\n label: \"Elizabethan Period (1558–1603)\",\n value: \"Elizabethan Period (1558-1603)\",\n },\n {\n label: \"French Grand Siècle (1601–1715)\",\n value: \"French Grand Siècle (1601-1715)\",\n },\n {\n label: \"Jacobean Period (1603–1625)\",\n value: \"Jacobean Period (1603-1625)\",\n },\n {\n label: \"American Colonial Period (1607–1775)\",\n value: \"American Colonial Period (1607-1775)\",\n },\n {\n label: \"Caroline Period (1625–1649)\",\n value: \"Caroline Period (1625-1649)\",\n },\n {\n label: \"Commonwealth Period (1649–1660)\",\n value: \"Commonwealth Period (1649-1660)\",\n },\n {\n label: \"The Restoration (1660–1700)\",\n value: \"The Restoration (1660-1700)\",\n },\n {\n label: \"English Neoclassical Period (1660–1785)\",\n value: \"English Neoclassical Period (1660-1785)\",\n },\n {\n label: \"Augustan Period (1700–1745)\",\n value: \"Augustan Period (1700-1745)\",\n },\n {\n label: \"Age of Enlightenment (1650–1800)\",\n value: \"Age of Enlightenment (1650-1800)\",\n },\n {\n label: \"The Great Awakening (1730–1749)\",\n value: \"The Great Awakening (1730-1749)\",\n },\n {\n label: \"Age of Sensibility (1745–1785)\",\n value: \"Age of Sensibility (1745-1785)\",\n },\n {\n label: \"American Early National Period (1775–1830)\",\n value: \"American Early National Period (1775-1830)\",\n },\n {\n label: \"European Romantic Period (1775–1850)\",\n value: \"European Romantic Period (1775-1850)\",\n },\n {\n label: \"German Romantic Period (1775–1830)\",\n value: \"German Romantic Period (1775-1830)\",\n },\n {\n label: \"English Romantic Period (1785–1837)\",\n value: \"English Romantic Period (1785-1837)\",\n },\n {\n label: \"Russian Golden Age of Literature (1801–1900)\",\n value: \"Russian Golden Age of Literature (1801-1900)\",\n },\n {\n label: \"French Romantic Period (1815–1850)\",\n value: \"French Romantic Period (1815-1850)\",\n },\n {\n label: \"American Romantic Period (1828–1865)\",\n value: \"American Romantic Period (1828-1865)\",\n },\n {\n label: \"Victorian Period (1837–1901)\",\n value: \"Victorian Period (1837-1901)\",\n },\n {\n label: \"Realist and Naturalist Period (1840–1910)\",\n value: \"Realist and Naturalist Period (1840-1910)\",\n },\n {\n label: \"Irish Literary Revival (1880–1930)\",\n value: \"Irish Literary Revival (1880-1930)\",\n },\n {\n label: \"Modern Period (1901–1945)\",\n value: \"Modern Period (1901-1945)\",\n },\n {\n label: \"Harlem Renaissance (1918–1937)\",\n value: \"Harlem Renaissance (1918-1937)\",\n },\n {\n label: \"Postmodern and Contemporary Period (1946–Present)\",\n value: \"Postmodern and Contemporary Period (1946-Present)\",\n },\n];\n","// The a plus promo in the filters is shown for groups of refinements.\n// This is mapping of those refinement attributs to the group\nconst category = {\n value: \"category\",\n};\n\nconst type = {\n value: \"type\",\n};\n\nconst timePeriod = {\n value: \"timePeriod\",\n};\n\nconst literaryPeriod = {\n value: \"literaryPeriod\",\n};\n\nconst literaryMovement = {\n value: \"literaryMovement\",\n};\n\nconst author = {\n value: \"author\",\n};\n\nconst gradeLevel = {\n value: \"gradeLevel\",\n};\n\nexport default {\n category,\n type,\n genre: type,\n timePeriod,\n literaryPeriod,\n literaryMovement,\n authorEthnicity: author,\n authorNationality: author,\n authorGender: author,\n gradeLevel,\n};\n","export default [\n {\n label: \"Before 500\",\n value: \"Before 500\",\n },\n {\n label: \"501-1400\",\n value: \"501-1400\",\n },\n {\n label: \"1401-1500\",\n value: \"1401-1500\",\n },\n {\n label: \"1501-1600\",\n value: \"1501-1600\",\n },\n {\n label: \"1601-1700\",\n value: \"1601-1700\",\n },\n {\n label: \"1701-1800\",\n value: \"1701-1800\",\n },\n {\n label: \"1801-1900\",\n value: \"1801-1900\",\n },\n {\n label: \"1901-1950\",\n value: \"1901-1950\",\n },\n {\n label: \"1951-2000\",\n value: \"1951-2000\",\n },\n {\n label: \"2001-Present\",\n value: \"2001-Present\",\n },\n];\n","export default [\n {\n label: \"Poetry\",\n value: \"Poetry\",\n },\n {\n label: \"Prose Nonfiction\",\n value: \"Prose Nonfiction\",\n },\n {\n label: \"Prose Fiction\",\n value: \"Prose Fiction\",\n },\n {\n label: \"Play or Drama\",\n value: \"Play or Drama\",\n },\n {\n label: \"Mythology\",\n value: \"Mythology\",\n },\n];\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport Select from \"components/shared/Select\";\n\nclass UserDownloadsSortControl extends React.Component {\n static propTypes = {\n containerSelector: PropTypes.string,\n listSelector: PropTypes.string,\n listItemSelector: PropTypes.string,\n };\n\n constructor(props) {\n super(props);\n this.options = [\n { label: \"Recently Downloaded\", value: \"created-at\" },\n { label: \"Alphabetical\", value: \"title\" },\n ];\n }\n\n updateSort(sortBy) {\n const $container = $(this.props.containerSelector);\n const $list = $container.find(this.props.listSelector);\n let $listItems = $list.find(this.props.listItemSelector);\n\n $listItems.sort(function (a, b) {\n const aVal = $(a).data(sortBy).toString();\n const bVal = $(b).data(sortBy).toString();\n\n if (aVal > bVal) {\n return 1;\n }\n if (aVal < bVal) {\n return -1;\n }\n return 0;\n });\n\n // desc vs asc\n if (sortBy === \"created-at\") {\n $listItems = $($listItems.get().reverse());\n }\n\n $listItems.detach().appendTo($list);\n }\n\n onChange(option) {\n this.updateSort(option.value.toLowerCase());\n }\n\n render() {\n return (\n <Select\n {...this.props}\n baseClassName=\"lc-select-container--md\"\n options={this.options}\n value={this.options[0].value}\n id=\"sort-control__select\"\n placeholder=\"Filter by first letter\"\n onChange={(value) => this.onChange(value)}\n />\n );\n }\n}\n\nexport default UserDownloadsSortControl;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport Select from \"components/shared/Select\";\n\nclass UserHighlightsFilterControl extends React.Component {\n static propTypes = {\n containerSelector: PropTypes.string,\n listSelector: PropTypes.string,\n listItemSelector: PropTypes.string,\n };\n\n static defaultProps = {\n containerSelector: \".container\",\n listSelector: \".user-highlights\",\n listItemSelector: \".user-highlight\",\n };\n\n updateFilter(filterBy) {\n const $container = $(this.props.containerSelector);\n const $list = $container.find(this.props.listSelector);\n const $listItems = $list.find(this.props.listItemSelector);\n\n if (filterBy) {\n $listItems.each(function () {\n $(this).toggle($(this).data(\"book\").toString() === filterBy.toString());\n });\n } else {\n $listItems.show();\n }\n }\n\n onChange(option) {\n this.updateFilter(option.value);\n }\n\n render() {\n return (\n <Select\n {...this.props}\n baseClassName=\"lc-select-container--md\"\n options={this.props.options}\n value={this.props.options[0].value}\n onChange={(value) => this.onChange(value)}\n />\n );\n }\n}\n\nexport default UserHighlightsFilterControl;\n","import React, { useEffect, useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport Input from \"components/shared/Input\";\nimport Select from \"components/shared/Select\";\n\nconst propTypes = {\n actionOptions: PropTypes.array.isRequired,\n beForgottenOptions: PropTypes.array.isRequired,\n data: PropTypes.object,\n dataTransferOptions: PropTypes.array.isRequired,\n errorMessages: PropTypes.object,\n requestDataAccessOptions: PropTypes.array.isRequired,\n stopProcessingDataOptions: PropTypes.array.isRequired,\n};\n\nconst defaultProps = {\n data: {},\n errorMessages: {},\n};\n\n// Actual <form> is in the rails view\nconst GdprRequestForm = (props) => {\n const [action, setAction] = useState(null);\n\n useEffect(() => {\n setAction(props.data.action);\n }, []);\n\n function onActionChange(option) {\n setAction(option.value);\n }\n\n let ActionComponent;\n\n const {\n beForgottenOptions,\n dataTransferOptions,\n requestDataAccessOptions,\n stopProcessingDataOptions,\n } = props;\n\n switch (action) {\n case \"be_forgotten\":\n // eslint-disable-next-line react/no-unstable-nested-components\n ActionComponent = () => (\n <>\n <Select\n errorMessage={props.errorMessages.reason}\n isRequired\n labelText=\"Why do you want your data to be deleted?\"\n id=\"gdpr-request-reason\"\n name=\"gdpr_request[reason]\"\n placeholder=\"Select an option\"\n options={beForgottenOptions}\n value={props.data.reason}\n />\n <Input\n name=\"gdpr_request[additional_info]\"\n inputId=\"gdpr-request-additional-info\"\n placeholder=\"Additional info\"\n labelText=\"Optionally, specify which data you want to make sure LitCharts will delete\"\n InputComponent=\"textarea\"\n value={props.data.additional_info}\n errorMessage={props.errorMessages.additionalInfo}\n />\n </>\n );\n break;\n case \"data_transfer\":\n // eslint-disable-next-line react/no-unstable-nested-components\n ActionComponent = () => (\n <>\n <Select\n errorMessage={props.errorMessages.transferRecipient}\n isRequired\n labelText=\"To whom do you want LitCharts to transfer your data?\"\n id=\"gdpr_request[transfer_recipient]\"\n name=\"gdpr_request[transfer_recipient]\"\n placeholder=\"Select an option\"\n options={dataTransferOptions}\n value={props.data.reason}\n />\n <Input\n errorMessage={props.errorMessages.transfer3rdParty}\n name=\"gdpr_request[transfer_3rd_party]\"\n isRequired\n placeholder=\"Third party\"\n labelText=\"Specify the third party and how we should contact them\"\n InputComponent=\"textarea\"\n value={props.data.transfer_3rd_party}\n />\n <Input\n name=\"gdpr_request[additional_info]\"\n placeholder=\"Additional info\"\n labelText=\"Optionally, describe your request in more detail. Which data should be transferred?\"\n InputComponent=\"textarea\"\n value={props.data.additional_info}\n errorMessage={props.errorMessages.additionalInfo}\n />\n </>\n );\n break;\n case \"data_access\":\n // eslint-disable-next-line react/no-unstable-nested-components\n ActionComponent = () => (\n <>\n <Select\n errorMessage={props.errorMessages.reason}\n isRequired\n labelText=\"What information about your data would you like to access?\"\n id=\"gdpr_request[reason]\"\n name=\"gdpr_request[reason]\"\n placeholder=\"Select an option\"\n options={requestDataAccessOptions}\n value={props.data.reason}\n />\n <Input\n name=\"gdpr_request[additional_info]\"\n placeholder=\"Additional info\"\n labelText=\"Optionally, explain your question in more detail\"\n InputComponent=\"textarea\"\n value={props.data.additional_info}\n errorMessage={props.errorMessages.additionalInfo}\n />\n </>\n );\n break;\n case \"rectification\":\n // eslint-disable-next-line react/no-unstable-nested-components\n ActionComponent = () => (\n <>\n <Input\n errorMessage={props.errorMessages.incorrectData}\n name=\"gdpr_request[incorrect_data]\"\n placeholder=\"Description\"\n labelText=\"Describe the incorrect data that LitCharts has about you\"\n InputComponent=\"textarea\"\n value={props.data.incorrect_data}\n isRequired\n />\n <Input\n name=\"gdpr_request[correct_data]\"\n placeholder=\"Description\"\n labelText=\"Describe the correct version of the same data\"\n InputComponent=\"textarea\"\n value={props.data.correct_data}\n errorMessage={props.errorMessages.correctData}\n isRequired\n />\n </>\n );\n break;\n case \"stop_marketing_profiling\":\n // eslint-disable-next-line react/no-unstable-nested-components\n ActionComponent = () => (\n <Input\n name=\"gdpr_request[additional_info]\"\n placeholder=\"Additional info\"\n labelText=\"Optionally, specify more details\"\n InputComponent=\"textarea\"\n value={props.data.additional_info}\n errorMessage={props.errorMessages.additionalInfo}\n />\n );\n break;\n case \"stop_processing\":\n // eslint-disable-next-line react/no-unstable-nested-components\n ActionComponent = () => (\n <>\n <Select\n errorMessage={props.errorMessages.reason}\n isRequired\n labelText=\"Why do you want LitCharts to stop processing your data?\"\n id=\"gdpr_request[reason]\"\n name=\"gdpr_request[reason]\"\n placeholder=\"Select an option\"\n options={stopProcessingDataOptions}\n value={props.data.reason}\n />\n <Input\n name=\"gdpr_request[additional_info]\"\n placeholder=\"Additional info\"\n labelText=\"Optionally, please describe your request in more detail\"\n InputComponent=\"textarea\"\n value={props.data.additional_info}\n errorMessage={props.errorMessages.additionalInfo}\n />\n </>\n );\n break;\n case \"objection\":\n // eslint-disable-next-line react/no-unstable-nested-components\n ActionComponent = () => (\n <Input\n name=\"gdpr_request[additional_info]\"\n placeholder=\"Additional info\"\n labelText=\"Please describe the nature of your objection to how LitCharts is using your personal information\"\n InputComponent=\"textarea\"\n value={props.data.additional_info}\n errorMessage={props.errorMessages.additionalInfo}\n isRequired\n />\n );\n break;\n default:\n // eslint-disable-next-line react/no-unstable-nested-components\n ActionComponent = () => null;\n }\n\n return (\n <>\n <Input\n errorMessage={props.errorMessages.name}\n name=\"gdpr_request[name]\"\n inputId=\"gdpr-request-name\"\n value={props.data.name}\n isRequired\n labelText=\"What's your name?\"\n placeholder=\"Your name\"\n />\n <Input\n errorMessage={props.errorMessages.email}\n name=\"gdpr_request[email]\"\n inputId=\"gdpr-request-email\"\n value={props.data.email}\n isRequired\n labelText=\"Email address (we won't share your email address, ever)\"\n placeholder=\"Your email\"\n />\n <Select\n errorMessage={props.errorMessages.action}\n id=\"gdpr-request-action\"\n isRequired\n name=\"gdpr_request[action]\"\n onChange={onActionChange}\n placeholder=\"Select an option\"\n labelText=\"What is your specific privacy related request?\"\n options={props.actionOptions}\n value={props.data.action}\n />\n <ActionComponent />\n </>\n );\n};\n\nGdprRequestForm.propTypes = propTypes;\nGdprRequestForm.defaultProps = defaultProps;\n\nexport default GdprRequestForm;\n","export const DEVICES = \"devices\";\nexport const CHAPTERS = \"chapters\";\n","import events from \"initializers/events\";\nimport detectUserInput from \"initializers/detectUserInput\";\nimport globalViews from \"initializers/globalViews\";\nimport applyUtilityClasses from \"initializers/applyUtilityClasses\";\nimport view from \"initializers/view\";\nimport toast from \"initializers/toast\";\n\nexport default [\n view,\n detectUserInput,\n globalViews,\n applyUtilityClasses,\n events,\n toast,\n];\n","import header from \"views/shared/header/base\";\n\n// use this initializer for shared global views, i.e. sitewide header, footer, etc.\nexport default {\n initialize: () => {\n const views = [header];\n\n $().ready(() => {\n views.forEach((view) => {\n view.ready.call(view);\n });\n });\n },\n};\n","import { toastNotify } from \"helpers/toastNotify\";\nimport React from \"react\";\n\n// (paul) This allows us to set toast messages via Rails flash.\n// Generally I don't like using `dangerouslySetInnerHTML` but that\n// should only be set by us and not user input.\n\nexport default {\n initialize: () => {\n if (window.toastMessage) {\n toastNotify(\n window.toastMessage,\n window.toastLink && (\n <div dangerouslySetInnerHTML={{ __html: window.toastLink }} />\n )\n );\n }\n },\n};\n"],"names":["_regeneratorRuntime","e","t","r","Object","prototype","n","hasOwnProperty","o","defineProperty","value","i","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","type","arg","call","h","l","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","p","d","getPrototypeOf","v","values","g","defineIteratorMethods","forEach","_invoke","AsyncIterator","invoke","resolve","__await","then","callInvokeWithMethodAndArg","Error","done","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","isNaN","length","displayName","isGeneratorFunction","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","keys","reverse","pop","prev","charAt","slice","stop","rval","handle","complete","finish","delegateYield","asyncGeneratorStep","_slicedToArray","Array","isArray","_arrayWithHoles","_iterableToArrayLimit","_arrayLikeToArray","toString","from","test","_unsupportedIterableToArray","_nonIterableRest","sessionStorageKey","validationSchema","Yup","shape","title","required","question","min","max","AIForm","props","loading","locked","onSubmit","_props$options","options","questionMinimum","quotaRemaining","resetDate","signupPath","_useState2","useState","isLessThanSmallBreakpoint","setIsLessThanSmallBreakpoint","_useState4","collapsed","setCollapsed","disableFields","resizeHandler","window","matchMedia","concat","SM_PIXEL_MIN","matches","XS_PIXEL_MAX","useLayoutEffect","addEventListener","removeEventListener","useEffect","document","body","style","overflow","buttonRemainingText","buttonCTA","buttonText","resetText","pluralize","showDisclaimerText","unpackValueFromStorage","key","storageKey","storedValue","sessionStorage","getItem","removeItem","initialValues","storeFieldForReload","setItem","validateForm","_ref","_callee","formValues","yupFormErrors","_context","validate","abortEarly","t0","yupToFormErrors","arguments","apply","_next","_throw","_x","handleClose","React","Formik","validateOnBlur","validateOnChange","validateOnMount","location","href","formik","handleSubmit","className","classnames","IconButton","iconClass","btnClass","onClick","AI_ANSWERS_QUOTA","Select","errorMessage","errors","id","isDisabled","isSearchable","labelText","placeholder","onChange","fieldKey","setFieldValue","InputTextCounter","disabled","hideSubtext","setFieldError","target","attr","DisclaimerText","propTypes","PropTypes","isRequired","defaultProps","AskLitchartsAI","quotaFromProps","submissionPath","aiAnswersCompletePath","_useChatMessages","useChatMessages","upgradeable","eventCategory","channel","AI_TOOL_CHANNELS","ASK_AI","toolName","AI_TOOL_NAMES","messages","prevSlug","handleAskAIFormSubmit","AIToolsLayout","_extends","QUESTION_MINIMUM_LENGTH","ChatArea","DiscussionQuestions","_selectedSubtopic$mes","_selectedTopic$labelT2","topic","when","subtopic","_","_AI_TOOLS_LABEL_MAP$s","_selectedTopic$labelT","selectedTopic","data","AI_TOOLS_LABEL_MAP","label","toLowerCase","loadingTopics","setLoadingTopics","topics","setTopics","_useState6","setSelectedTopic","_useState8","selectedSubtopic","setSelectedSubtopic","_useWindowResizeAndFo","useWindowResizeAndFormCollapse","useFormik","handleQuizDiscussionEssayPrompt","setErrors","DISCUSSION_QUESTIONS","messageText","useFormDisableFields","handleError","timeoutRef","clearTimeout","AIFormLayout","REUSABLES","TITLE","TOPIC","undefined","SUBTOPIC","guidePath","loadingTimeout","setTimeout","fetch","response","ok","json","error","console","fetchDropdownContent","guide_path","isControlled","isLoading","AI_TOOLS_LOADING_DEFAULTS","find","EssayPrompts","ESSAY_PROMPTS","InContentAIForm","onResourceChange","formRef","useRef","scrollAboveMobileKeyboard","isSmallWindow","helpers","form","current","footerHeight","querySelector","clientHeight","scrollTo","top","offsetTop","offsetHeight","behavior","$","ref","onFocus","maxMenuHeight","menuPlacement","amplitudeKey","buttonVariant","InContentAskLitchartsAI","guidesPath","inPoetry","optionsFromProps","resource","setOptions","_options$find","option","resourceTitle","setResourceTitle","inContent","scrollToolIntoViewOnTap","fetchGuidesList","cache","status","newOptions","guides","indexToReplace","findIndex","guide","at","offset","$scrollTarget","on","event","is","windowOffset","topOffset","slug","newResourceTitle","QuizQuestions","QUIZ_QUESTIONS","AI_TOOLS_ERROR_MESSAGES","Characters","Symbols","Themes","AMPLITUDE_BANNER_DATA_ATTRIBUTES","_defineProperty","AMPLITUDE_QUESTION_ASKED_LARGE_ATTRIBUTES","AMPLITUDE_QUESTION_ASKED_SMALL_ATTRIBUTES","AMPLITUDE_QUESTION_ASKED_SMALL_COLLAPSED_ATTRIBUTES","AMPLITUDE_SIGNUP_INTRO_CHAT_ATTRIBUTES","AMPLITUDE_SIGNUP_FORM_LARGE_ATTRIBUTES","AMPLITUDE_SIGNUP_FORM_SMALL_COLLAPSED_ATTRIBUTES","dependencies","setLoading","setQuotaRemaining","setMessages","setPrevSlug","messagesCallbacks","prevMessages","copyArray","_toConsumableArray","updatedMessage","_objectSpread","children","streamState","DEFAULT_STATE","handleRedirect","redirect_to","replace","handleBroadcastReceived","previousMessageIndex","aiAnswerId","ai_answer_id","ReactHtmlParser","reminderMessage","serverBubbleConfig","CopyAndSaveReminder","prevMsgs","JSON","stringify","handleFetchError","logAiEvent","previousMessage","LOADING_STATE","STREAMING_STATE","slideUp","splice","initialMessage","InitialMessage","consumer","subscriptions","connected","log","disconnected","received","disconnect","callback","newServerMessage","newUserMessage","userBubbleConfig","_ref2","setButtonText","setResetText","submittingButtonText","setsubmittingButtonText","layoutRef","layoutBanner","panelBanner","promoBanner","header","layoutBannerHeight","panelBannerHeight","promoBannerHeight","height","_useFormText","useFormText","preventDefault","AIFormTitle","AIFormSubheading","LockedInformationBanner","touched","handleChange","handleBlur","isSubmitting","popoverText","popoverOptions","container","content","html","placement","template","toggle","trigger","_ref$className","tooltipActive","setTooltipActive","tooltipRef","touchEventRef","dismissPopover","popover","useClickOutsideElement","onMouseEnter","onMouseLeave","onKeyDown","handleKeyPress","onTouchStart","role","tabIndex","amplitudeDataAttribute","InitialMessageDescription","InitialMessageBullets","InitialMessageExample","src","AskAiImg","alt","DqgImg","QqgImg","EpgImg","bookmarks","EmptyContainer","browsePath","emptyImgSrc","BookmarkList","bookmarksFromProps","setBookmarks","subtitleText","handleRemoveBookmark","bookmarkId","newBookmarks","reject","bookmark","map","index","LitCard","hideSuccessCta","onRemoval","includeTags","userSignedIn","RelatedThemesFilterBox","_React$Component","_this","_classCallCheck","_callSuper","onCheckboxChange","isSubscribed","showSidebarPromo","checked","setState","selected","state","filter","onMoreToggleClick","allVisible","_inherits","_createClass","prevProps","prevState","this","_this$props","totalFilters","_this2","_this$props2","isPromoVisible","filterables","position","zIndex","Checkbox","count","renderMoreToggleBtn","isFreeTier","RelatedThemes","_React$Component2","_this3","closeSidebarPromo","sidebarPromoVisible","filteredAuthors","filteredBooks","filteredThemes","relatedThemes","_this$state","selectedFiltersToHash","b","bookAuthorFullName","bookTitle","reduce","k","_this4","_this$props3","aPlusDialogHref","aPlusDialogLogoSrc","_this$props4","APlusDialog","logoSrc","shouldRenderCloseBtn","_this$props5","filterableAuthorCount","filterableAuthors","filterableBookCount","filterableBooks","renderFilterBox","renderSidebarPromo","mainTheme","path","dangerouslySetInnerHTML","__html","mediumIconHtml","largeIconHtml","bookPath","descriptionHtml","blurredThemesImgSrc","maxWidth","_this$props6","aPlusDialogContent","_this$props7","relatedThemesCount","getThemeCount","renderRelatedThemeCards","renderRelatedThemesBlur","renderPromo","renderSidebar","renderThemeYouWereReading","renderRelatedThemes","SummaryAnalysisAPlusDialog","logoSrcXs","linkClasses","GroupsInfoExpandableFaqRow","answer","Expandable","expandableClassName","GroupsInfoFaqRow","isExpanded","summarySection","litTerms","litTerm","LocalTag","summarySections","ss","ChaptersRow","hideFilters","filterOptions","filterBy","viewMode","sortedLitTerms","useMemo","term","sortedSummarySections","some","CHAPTERS","ChaptersView","DEVICES","DevicesView","showPath","keyExamplesCount","DevicesRow","currentFilter","setCurrentFilter","setViewMode","sectionType","LandingPage","handleParamChange","updateHistory","url","URL","searchParams","set","history","pushState","lowerCaseOptions","_this$state$viewMode","PageDescription","authorName","Filters","Content","QueryParamsControls","setFilterBy","findFilterByOption","filterByOption","setParamFilters","_helpers$getQueryPara","_helpers$getQueryPara2","viewModeParam","filterByParam","_helpers$getQueryPara3","_helpers$getQueryPara4","items","menuParentProps","Menu","item","_item$children","MenuParent","MenuItem","menuItemType","shouldAutoExpand","iconUrl","showChildren","setShowChildren","toggleExpand","show","onKeyPress","Icon","size","child","publicDomain","alignment","leftContent","rightContent","handleLargeScreenClick","aiTool","cls","classList","handleSmallScreenClick","querySelectorAll","banner","TextToggle","onToggle","ComponentItemSelect","modalCategory","modalTitle","category","componentValue","activeContext","selector","selectors","COMPONENT","$component","$section","closest","SECTION","hasClass","$title","COMPONENT_TITLE","$valueReplace","COMPONENT_VALUE_REPLACE","$activeContext","ACTIVE_CONTEXT_NOTE","$content","POEM_CONTENT","$modalCategory","TEXT_MODAL_CATEGORY","text","setComponentContentViaAjax","selectComponentItem","componentId","el","ajax","dataType","success","ReactDOM","bannerContent","QuizAnswerChoice","answerLetter","answerText","isSelectedAnswer","setSelectedAnswer","isAnonUser","link","isSelected","QUIZ_ANSWER_STATES","UNLOCKED","handleAnswerSelected","canBeTabbed","LOCKED","amplitudeEvent","classNames","QuizAnswerChoiceIcon","ReviewButton","icon","SKIPPED","CORRECT","INCORRECT","DISABLED","iconName","answerOptions","onAnswerSelect","questionId","questionIndex","questionText","questionTotal","QuizCard","selectedAnswer","handleAnswerSelect","answerOption","cardState","QUIZ_RESULT_STATES","QuizCardResult","bannerExpanded","setBannerExpanded","QuizCardResultText","attemptCount","lockedRedirectUrl","previousPercentCorrect","quizSubmission","correct","incorrect","skipped","percentCorrect","reviewLink","quizQuestions","ANSWER_OPTION_LETTERS","correctAnswerKey","QuizResult","handleRetake","pathname","amplitudeFunnel","ResultsPanel","onRetakeClick","quizQuestion","lastQuizSubmissionSummary","quizTitle","submissionUrl","QuizSubmission","setIsLoading","emptyQuestionsSubmission","acc","cur","assign","quizQuestionsSubmission","setQuizQuestionsSubmission","handleLockedState","chosenAnswer","updatedSubmission","token","reloadPath","split","request","headers","quiz_submission","quiz_question_submissions_attributes","quiz_question_id","chosen_answer","_response","alert","Counter","_ref2$correct","_ref2$incorrect","_ref2$skipped","total","roundedPercentage","Math","round","summaryText","MultiSelectRefinementList","attribute","categories","authorEthnicities","limit","authorGenders","countries","genreCategories","RefinementList","gradeLevelCategories","HierarchicalRefinementList","guideCategories","literaryMovementCategories","refinementLimit","literaryPeriodCategories","timePeriodCategories","typeCategories","MAPPING","CurrentRefinementPill","refine","getLabel","string","cardinalize","indexOf","truncate","handleResize","width","parent","outerWidth","connectCurrentRefinements","isSticky","setIsSticky","setIsExpanded","hiddenRefinements","setHiddenRefinements","containerRef","listRef","handleScroll","passive","_step","_iterator","_createForOfIteratorHelper","getBoundingClientRect","err","itemsToRender","refinement","currentRefinement","containerClassName","listClassName","hidden","hideFlyout","hideFlyoutHover","Flyout","flyoutReference","referenceMapping","controlled","flyState","setFlyState","refinedValues","updateRefinedValue","handleRefine","outsideFlyoutClickListener","toggleFlyout","removeClass","addClass","innerWidth","showFlyout","HierarchicalRefinementListElement","handleClick","connectRefinementList","itemsToCount","isRefined","refinedCount","hitCount","accumulator","currentVal","liClassName","elementCountClassName","number","commaSeparateNumber","hit","primaryTitle","secondaryTitle","blurb","author","isAPlus","Hit","hitClass","categoryClass","titleClass","blurbClass","authorClass","isBlurred","htmlDecode","aPlusPromoUrl","hits","promoInfo","characterCount","quoteCount","symbolCount","themeCount","quizCount","litDeviceCount","Paginate","connectStateResults","searchResults","nbHits","Pagination","showLast","PromoContent","searchState","relatedText","query","resultData","disjunctiveFacets","Hits","NoResults","showRequestContentAfterDelay","shownPromo","objectID","APlus","logo","connectHits","setCurrentPromoAttribute","refinementClassName","countedCategories","cat","numResults","MultiSelect","selectedValues","promoAttributeReference","preventSelect","FilterPromoContext","Consumer","filterPromoContextProps","showRequestContentModal","modal","RequestContentModal","logoUrl","showAfterDelay","Label","refineable","RefineElement","ControlledCheckbox","_label$split2","label1","label2","isRefineable","categoryValue","showAllRefinements","setShowAllRefinements","shownCategories","setShownCategories","refinementsToRemove","setRefinementsToRemove","renderElements","setRenderElements","resultCount","refineableCategories","curr","every","result","array","allCategories","val","includes","showingRefiments","RefinementListWithPromoContext","currentPromoAttribute","SearchBox","connectSearchBox","currentTarget","algoliaAppId","algoliaApiKey","metadataConstants","SearchResults","isSearchStalled","showFilters","Stats","translations","stats","CurrentRefinements","Search","showMobileFilters","setShowMobileFilters","newPromoAttr","setFilterPromoContextState","filterPromoContextState","searchClient","algoliasearch","remove","outsideFilterClickListener","$target","contains","closeMiniPromo","showMiniAplusPromo","MiniAPlus","InstantSearch","indexName","Provider","GuideRefinementList","TypeRefinementList","GenreMultiSelect","TimePeriodRefinementList","LiteraryPeriodRefinementList","LiteraryMovementRefinementList","AuthorNationalityMultiSelect","AuthorEthnicityMultiSelect","AuthorGenderMultiSelect","GradeLevelRefinementList","defaultRefinement","append","Shakescleare","Poetry","Mythology","litGuideReference","poetryGuideReference","shakesReference","litTermReference","proseFictionReference","proseNonfictionReference","poetryReference","playDramaReference","mythologyReference","genre","timePeriod","literaryPeriod","literaryMovement","authorEthnicity","authorNationality","authorGender","gradeLevel","UserDownloadsSortControl","sortBy","$list","containerSelector","listSelector","$listItems","listItemSelector","sort","aVal","bVal","get","detach","appendTo","updateSort","baseClassName","UserHighlightsFilterControl","each","updateFilter","actionOptions","beForgottenOptions","dataTransferOptions","errorMessages","requestDataAccessOptions","stopProcessingDataOptions","GdprRequestForm","ActionComponent","action","setAction","reason","Input","inputId","InputComponent","additional_info","additionalInfo","transferRecipient","transfer3rdParty","transfer_3rd_party","incorrectData","incorrect_data","correct_data","correctData","email","view","detectUserInput","globalViews","applyUtilityClasses","events","toast","initialize","views","ready","toastMessage","toastNotify","toastLink"],"sourceRoot":""}